우리의 애플리케이션이나 웹 프로그램은 구성을 위해 xml 파일을 사용해야 하는 경우가 많으며, 최종 프로그램은 고객이 사용해야 하므로 XML도 고객이 작성해야 할 수 있습니다. 그렇지 않으면 xml 파일이 완전히 정확하다는 보장이 없으므로 이 클래스의 주요 기능은 xml로 작성된 파일이 정의된 xsd 사양을 준수하는지 확인하는 것입니다.
package common.xml.validator; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.Reader; import java.io.StringReader; import java.net.URL; import javax.xml.XMLConstants; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import org.xml.sax.SAXException; /** *//** * @author suyuan * */ public class XmlSchemaValidator { private boolean isValid = true; private String xmlErr = ""; public boolean isValid() { return isValid; } public String getXmlErr() { return xmlErr; } public XmlSchemaValidator() { } public boolean ValidXmlDoc(String xml,URL schema) { StringReader reader = new StringReader(xml); return ValidXmlDoc(reader,schema); } public boolean ValidXmlDoc(Reader xml,URL schema) { try { InputStream schemaStream = schema.openStream(); Source xmlSource = new StreamSource(xml); Source schemaSource = new StreamSource(schemaStream); return ValidXmlDoc(xmlSource,schemaSource); } catch (IOException e) { isValid = false; xmlErr = e.getMessage(); return false; } } public boolean ValidXmlDoc(String xml,File schema) { StringReader reader = new StringReader(xml); return ValidXmlDoc(reader,schema); } public boolean ValidXmlDoc(Reader xml,File schema) { try { FileInputStream schemaStream = new FileInputStream(schema); Source xmlSource = new StreamSource(xml); Source schemaSource = new StreamSource(schemaStream); return ValidXmlDoc(xmlSource,schemaSource); } catch (IOException e) { isValid = false; xmlErr = e.getMessage(); return false; } } public boolean ValidXmlDoc(Source xml,Source schemaSource) { try { SchemaFactory schemafactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); if(xml==null||xml.equals("")) { return false; } Schema schema = schemafactory.newSchema(schemaSource); Validator valid = schema.newValidator(); valid.validate(xml); return true; } catch (SAXException e) { isValid = false; xmlErr = e.getMessage(); return false; } catch (IOException e) { isValid = false; xmlErr = e.getMessage(); return false; } catch (Exception e) { isValid = false; xmlErr = e.getMessage(); return false; } } }클래스는 다음과 같습니다.
package common.xml.validator; import java.io.*; import java.net.URL; public class testXmlValidator { /** *//** * @param args */ public static void main(String[] args) { InputStream XmlStream = testXmlValidator.class.getResourceAsStream("test.xml"); Reader XmlReader = new InputStreamReader(XmlStream); URL schema =testXmlValidator.class.getResource("valid.xsd"); XmlSchemaValidator xmlvalid = new XmlSchemaValidator(); System.out.println(xmlvalid.ValidXmlDoc(XmlReader, schema)); System.out.print(xmlvalid.getXmlErr()); } }xsd 파일은 다음과 같이 정의됩니다.
<xs:schema id="XSDSchemaTest" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" > <xs:simpleType name="FamilyMemberType"> <xs:restriction base="xs:string"> <xs:enumeration value="384" /> <xs:enumeration value="385" /> <xs:enumeration value="386" /> <xs:enumeration value="" /> </xs:restriction> </xs:simpleType> <xs:element name="Answer"> <xs:complexType> <xs:sequence> <xs:element name="ShortDesc" type="FamilyMemberType" /> <xs:element name="AnswerValue" type="xs:int" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>검증된 xml 예제는 다음과 같습니다.
<?xml version="1.0" encoding="utf-8" ?> <Answer> <ShortDesc>385</ShortDesc> <AnswerValue>1</AnswerValue> </Answer>이것은 java 버전이며,
C#의 클래스 파일은 다음과 같습니다. 물론, 나중에 필요할 때 직접 사용할 수 있도록 여기에 표시도 해 놓겠습니다. ㅎㅎ
위 내용은 XML 파일 정확성 검증 클래스의 샘플 코드 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!