mni*_*cky 21
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");
}
}
Run Code Online (Sandbox Code Playgroud)
Evg*_*eev 19
您可以一次解析并使用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));
Run Code Online (Sandbox Code Playgroud)
Validator读取test.xml调用reader.next()并像往常一样处理解析事件.
没有标准方法可以做到这一点。不过,有一个名为 StAX2 的 API 扩展,它支持使用 Sun 的 MSV(多模式验证)进行验证。我建议使用 Woodstox StAX2 实现。
| 归档时间: |
|
| 查看次数: |
15532 次 |
| 最近记录: |