在没有特定XSD的情况下验证XML

时间:2014-11-04 10:50:20

标签: java xml validation

我在使用XMLStreamReader创建XMLInputFactory时尝试验证(有效的xml文件)xml。

我知道可以在工厂javax.xml.stream.isValidating中设置属性以允许特定的实现验证(在我的情况下是xml)。但我正在使用 java 6 build 43 (Jboss eap 6.0)并且无法更新,所以这对我不起作用(kwnon问题)。

所以,如果有人知道任何API(除了StAX之外)可以做同样的事情,那就太好了! 如果没有明确解释,请告诉我。

2 个答案:

答案 0 :(得分:1)

找到它,我使用api SAX使用提供的SAXParserFactory创建一个解析器(独立于xsd模式)并解析文件。 (更多详情可在http://apiacoa.org/publications/teaching/xml/api-xml.pdf

页面(23/24)找到

另外,不要忘记在使用解析器解析之前/之后标记/重置输入流(如果xml文件格式不正确会抛出异常),这样你就可以保持原样。解析不会失败。

答案 1 :(得分:0)

你可以尝试IBM validation API的java xml验证API   您可以使用javax.xml.validation javax.xml.validation

ex:

import javax.xml.XMLConstants;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.*;
...

URL schemaFile = new URL("http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd");
Source xmlFile = new StreamSource(new File("web.xml"));
SchemaFactory schemaFactory = SchemaFactory
    .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = schemaFactory.newSchema(schemaFile);
Validator validator = schema.newValidator();
try {
  validator.validate(xmlFile);
  System.out.println(xmlFile.getSystemId() + " is valid");
} catch (SAXException e) {
  System.out.println(xmlFile.getSystemId() + " is NOT valid");
  System.out.println("Reason: " + e.getLocalizedMessage());
}

已编辑:

SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");

        File schemaFile = new File("schema.xsd");

        Schema xsdScheme = factory.newSchema(schemaFile);

        Validator validator = xsdScheme.newValidator();

        Source source = new StreamSource(xmlfile);

        validator.validate(source);

我在SO xsd validation

上找到的一个链接