Java 在没有特定XSD的情况下验证XML
在使用Java 在没有特定XSD的情况下验证XML,java,xml,validation,Java,Xml,Validation,在使用XMLInputFactory创建XMLStreamReader时,我试图验证(有效的xml文件)xml 我知道可以在工厂javax.xml.stream.isValidating中设置属性,以允许特定的实现验证(在我的xml示例中)。但是我使用的是java 6 build 43(Jboss eap 6.0),无法更新,因此这对我不起作用(kwnon问题) 因此,如果有人知道任何API(除了StAX)可以做同样的事情,那就太好了! 如果有什么解释不清楚,请告诉我。您可以尝试IBM提供的ja
XMLInputFactory
创建XMLStreamReader
时,我试图验证(有效的xml文件)xml
我知道可以在工厂javax.xml.stream.isValidating
中设置属性,以允许特定的实现验证(在我的xml示例中)。但是我使用的是java 6 build 43(Jboss eap 6.0),无法更新,因此这对我不起作用(kwnon问题)
因此,如果有人知道任何API(除了StAX)可以做同样的事情,那就太好了!
如果有什么解释不清楚,请告诉我。您可以尝试IBM提供的java xml验证API 或 您可以使用
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);
编辑:
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上找到的一个链接找到了它,我使用api SAX使用提供的SAXParserFactory创建了一个解析器(独立于xsd模式),并解析了该文件。(更多详细信息请参见第页(23/24),网址为)
另外,在使用解析器解析inputstream之前/之后,不要忘记标记/重置inputstream(如果xml文件格式不正确,则会引发异常),这样,如果解析没有失败,您就可以保持原样。不清楚您在问什么。对于初学者来说,验证总是针对某种模式(XSD、RELAX、Schematron等)。关于有效XML和格式良好的XML之间的区别,我建议您阅读。谢谢。你说得对。我的意思是格式良好的xml文件。例如,当我用firefox打开一个格式不好的xml文件时,它显示了一个错误(例如xml解析错误)。他问“没有特定的XSD”,但你用特定的XSD(
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
)?