我在使用XMLStreamReader
创建XMLInputFactory
时尝试验证(有效的xml文件)xml。
我知道可以在工厂javax.xml.stream.isValidating
中设置属性以允许特定的实现验证(在我的情况下是xml)。但我正在使用 java 6 build 43 (Jboss eap 6.0)并且无法更新,所以这对我不起作用(kwnon问题)。
所以,如果有人知道任何API(除了StAX之外)可以做同样的事情,那就太好了! 如果没有明确解释,请告诉我。
答案 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
上找到的一个链接