[转]XML验证大全备忘录

来源:互联网 发布:ug8.0编程教程入门图解 编辑:程序博客网 时间:2024/03/28 19:04

Checking Wellformed-ness

Before a document can be called XML and not csv, simple text or any other format, it needs to support the basic rules as defined by the XML Recommendation, when it adheres to these rules it is said to be Wellformed XML.

Code Fragments: DOM, SAX, dom4j, XOM

DOM

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();factory.setValidating(false);factory.setNamespaceAware(true);DocumentBuilder builder = factory.newDocumentBuilder();builder.setErrorHandler(new SimpleErrorHandler());Document document = builder.parse(new InputSource("document.xml"));

SAX

SAXParserFactory factory = SAXParserFactory.newInstance();factory.setValidating(false);factory.setNamespaceAware(true);SAXParser parser = factory.newSAXParser();XMLReader reader = parser.getXMLReader();reader.setErrorHandler(new SimpleErrorHandler());reader.parse(new InputSource("document.xml"));

dom4j

SAXReader reader = new SAXReader();reader.setValidation(false);reader.setErrorHandler(new SimpleErrorHandler());reader.read("contacts.xml");

XOM

SAXParserFactory factory = SAXParserFactory.newInstance();factory.setValidating(false);factory.setNamespaceAware(true);SAXParser parser = factory.newSAXParser();XMLReader reader = parser.getXMLReader();reader.setErrorHandler(new SimpleErrorHandler());Builder builder = new Builder(reader);builder.build("contacts.xml");

Validate using internal DTD

Parse the input document using only the DTD (contacts.dtd), as defined by the DOCTYPE in the input document, for validation.

Code Fragments: DOM, SAX, dom4j, XOM

DOM

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();factory.setValidating(true);factory.setNamespaceAware(true);DocumentBuilder builder = factory.newDocumentBuilder();builder.setErrorHandler(new SimpleErrorHandler());Document document = builder.parse(new InputSource("document.xml"));

SAX

SAXParserFactory factory = SAXParserFactory.newInstance();factory.setValidating(true);factory.setNamespaceAware(true);SAXParser parser = factory.newSAXParser();XMLReader reader = parser.getXMLReader();reader.setErrorHandler(new SimpleErrorHandler());reader.parse(new InputSource("document.xml"));

dom4j

SAXReader reader = new SAXReader();reader.setValidation(true);reader.setErrorHandler(new SimpleErrorHandler());reader.read("contacts.xml");

XOM

SAXParserFactory factory = SAXParserFactory.newInstance();factory.setValidating(true);factory.setNamespaceAware(true);SAXParser parser = factory.newSAXParser();XMLReader reader = parser.getXMLReader();reader.setErrorHandler(new SimpleErrorHandler());Builder builder = new Builder(reader);builder.build("contacts.xml");

Validate using internal XSD

Parse the input document using only the XML Schema (contacts.xsd), as defined by the noNamespaceSchemaLocation attribute in the input document, for validation.

Code Fragments: DOM, SAX, dom4j, XOM

DOM

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();factory.setValidating(true);factory.setNamespaceAware(true);factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage",       "http://www.w3.org/2001/XMLSchema");DocumentBuilder builder = factory.newDocumentBuilder();builder.setErrorHandler(new SimpleErrorHandler());Document document = builder.parse(new InputSource("document.xml"));

SAX

SAXParserFactory factory = SAXParserFactory.newInstance();factory.setValidating(true);factory.setNamespaceAware(true);SAXParser parser = factory.newSAXParser();parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage",       "http://www.w3.org/2001/XMLSchema");XMLReader reader = parser.getXMLReader();reader.setErrorHandler(new SimpleErrorHandler());reader.parse(new InputSource("document.xml"));

dom4j

SAXParserFactory factory = SAXParserFactory.newInstance();factory.setValidating(true);SAXParser parser = factory.newSAXParser();parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage",       "http://www.w3.org/2001/XMLSchema");SAXReader reader = new SAXReader(parser.getXMLReader());reader.setValidation(true);reader.setErrorHandler(new SimpleErrorHandler());reader.read("contacts.xml");

XOM

SAXParserFactory factory = SAXParserFactory.newInstance();factory.setValidating(true);factory.setNamespaceAware(true);SAXParser parser = factory.newSAXParser();parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage",       "http://www.w3.org/2001/XMLSchema");XMLReader reader = parser.getXMLReader();reader.setErrorHandler(new SimpleErrorHandler());Builder builder = new Builder(reader);builder.build("contacts.xml");

Validate using external Schema

Parse the input document using the schema (contacts.xsd), as defined externally by the source-code.

Code Fragments: DOM, SAX, dom4j, XOM

DOM

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();factory.setValidating(false);factory.setNamespaceAware(true);SchemaFactory schemaFactory =     SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");factory.setSchema(schemaFactory.newSchema(    new Source[] {new StreamSource("contacts.xsd")}));DocumentBuilder builder = factory.newDocumentBuilder();builder.setErrorHandler(new SimpleErrorHandler());Document document = builder.parse(new InputSource("document.xml"));

SAX

SAXParserFactory factory = SAXParserFactory.newInstance();factory.setValidating(false);factory.setNamespaceAware(true);SchemaFactory schemaFactory =     SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");factory.setSchema(schemaFactory.newSchema(    new Source[] {new StreamSource("contacts.xsd")}));SAXParser parser = factory.newSAXParser();XMLReader reader = parser.getXMLReader();reader.setErrorHandler(new SimpleErrorHandler());reader.parse(new InputSource("document.xml"));

dom4j

SAXParserFactory factory = SAXParserFactory.newInstance();SchemaFactory schemaFactory =     SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");factory.setSchema(schemaFactory.newSchema(    new Source[] {new StreamSource("contacts.xsd")}));SAXParser parser = factory.newSAXParser();SAXReader reader = new SAXReader(parser.getXMLReader());reader.setValidation(false);reader.setErrorHandler(new SimpleErrorHandler());reader.read("contacts.xml");

XOM

SAXParserFactory factory = SAXParserFactory.newInstance();factory.setValidating(false);factory.setNamespaceAware(true);SchemaFactory schemaFactory =     SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");factory.setSchema(schemaFactory.newSchema(    new Source[] {new StreamSource("contacts.xsd")}));SAXParser parser = factory.newSAXParser();XMLReader reader = parser.getXMLReader();reader.setErrorHandler(new SimpleErrorHandler());Builder builder = new Builder(reader);builder.build("contacts.xml");

Validate using internal DTD and external Schema

Parse the input document using the schema (contacts.xsd), as defined externally by the source-code and the DTD (contacts.dtd), as defined by the DOCTYPE in the input document, for validation.

Code Fragments: DOM, SAX, dom4j, XOM

DOM

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();factory.setValidating(true);factory.setNamespaceAware(true);SchemaFactory schemaFactory =     SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");factory.setSchema(schemaFactory.newSchema(    new Source[] {new StreamSource("contacts.xsd")}));DocumentBuilder builder = factory.newDocumentBuilder();builder.setErrorHandler(new SimpleErrorHandler());Document document = builder.parse(new InputSource("document.xml"));

SAX

SAXParserFactory factory = SAXParserFactory.newInstance();factory.setValidating(true);factory.setNamespaceAware(true);SchemaFactory schemaFactory =     SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");factory.setSchema(schemaFactory.newSchema(    new Source[] {new StreamSource("contacts.xsd")}));SAXParser parser = factory.newSAXParser();XMLReader reader = parser.getXMLReader();reader.setErrorHandler(new SimpleErrorHandler());reader.parse(new InputSource("document.xml"));

dom4j

SAXParserFactory factory = SAXParserFactory.newInstance();SchemaFactory schemaFactory =     SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");factory.setSchema(schemaFactory.newSchema(    new Source[] {new StreamSource("contacts.xsd")}));SAXParser parser = factory.newSAXParser();SAXReader reader = new SAXReader(parser.getXMLReader());reader.setValidation(true);reader.setErrorHandler(new SimpleErrorHandler());reader.read("contacts.xml");

XOM

SAXParserFactory factory = SAXParserFactory.newInstance();factory.setValidating(true);factory.setNamespaceAware(true);SchemaFactory schemaFactory =     SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");factory.setSchema(schemaFactory.newSchema(    new Source[] {new StreamSource("contacts.xsd")}));SAXParser parser = factory.newSAXParser();XMLReader reader = parser.getXMLReader();reader.setErrorHandler(new SimpleErrorHandler());Builder builder = new Builder(reader);builder.build("contacts.xml");

Conclusion

Several mechanisms and XML APIs can be used to parse and validate XML, by using JAXP 1.3 the mechanism can mostly stay the same for these different APIs.

原创粉丝点击