当我使用sax时,我知道我可以验证xml文件。但是,当我使用Stax时,我可以验证吗?
发布于 2011-05-17 21:56:59
使用SAX和DOM可以通过两种方式进行XML验证:
单独使用
使用StAX,验证是可能的,但这只是第一种方式。
您可以尝试如下所示:
import javax.xml.validation.*;
import javax.xml.transform.stax.*;
import javax.xml.stream.*;
import javax.xml.*;
import java.io.*;
public class StaxValidation {
public static void main (String args[]) throws Exception {
XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(new FileInputStream("test.xml"));
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new File("test.xsd"));
Validator validator = schema.newValidator();
validator.validate(new StAXSource(reader));
//no exception thrown, so valid
System.out.println("Document is valid");
}
}发布于 2012-11-17 12:09:50
您可以一次性使用StAX进行解析和验证。使用javax.xml.stream.util.StreamReaderDelegate:
XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(new FileInputStream ("test.xml"));
reader = new StreamReaderDelegate(reader) {
public int next() throws XMLStreamException {
int n = super.next();
// process event
return n;
}};
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new File("test.xsd"));
Validator validator = schema.newValidator();
validator.validate(new StAXSource(reader));验证器读取调用reader.next()的test.xml,您可以照常处理解析事件。
发布于 2011-04-27 00:58:36
没有标准的方法可以做到这一点。但是,有一个名为StAX2 API扩展,它支持使用Sun(多模式验证)进行验证。我建议使用Woodstox StAX2实现。
http://woodstox.codehaus.org/
https://stackoverflow.com/questions/5793087
复制相似问题