首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stax xml验证

stax xml验证
EN

Stack Overflow用户
提问于 2011-04-27 00:04:16
回答 3查看 17.4K关注 0票数 18

当我使用sax时,我知道我可以验证xml文件。但是,当我使用Stax时,我可以验证吗?

EN

回答 3

Stack Overflow用户

发布于 2011-05-17 21:56:59

使用SAX和DOM可以通过两种方式进行XML验证:

单独使用

  1. validate -通过Validator.validate()
  2. validate解析-通过DocumentBuilderFactory.setSchema()和SAXParserFactory.setSchema()

使用StAX,验证是可能的,但这只是第一种方式。

您可以尝试如下所示:

代码语言:javascript
复制
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");

    }
}
票数 22
EN

Stack Overflow用户

发布于 2012-11-17 12:09:50

您可以一次性使用StAX进行解析和验证。使用javax.xml.stream.util.StreamReaderDelegate:

代码语言:javascript
复制
 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,您可以照常处理解析事件。

票数 20
EN

Stack Overflow用户

发布于 2011-04-27 00:58:36

没有标准的方法可以做到这一点。但是,有一个名为StAX2 API扩展,它支持使用Sun(多模式验证)进行验证。我建议使用Woodstox StAX2实现。

http://woodstox.codehaus.org/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5793087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档