首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >parser.setFeature对parser.setValidating

parser.setFeature对parser.setValidating
EN

Stack Overflow用户
提问于 2013-02-13 12:11:22
回答 1查看 1K关注 0票数 3

以下几点之间有什么区别:

代码语言:javascript
复制
parser.setFeature("http://xml.org/sax/features/validation",true);
and
parser.setFeature("http://apache.org/xml/features/validation/schema",true);
and
parser.setValidating(true);

我在谷歌上找到了两次确切的问题,但没有找到答案。

我正在使用org.apache.commons.digester,我在消化池上调用setFeature或setValidating。

EN

回答 1

Stack Overflow用户

发布于 2014-06-27 09:42:28

我在寻找同一个问题的答案。你可能已经找到了你的答案,但对于像我这样到达这条线的人来说。

据我所见,它是特定于实现的。SAX似乎没有真正的规范(规范是他们的网站saxproject.org)。至少我没有在规范或javadoc中找到任何关于isValidating应该与验证特性同步的引用(也许我忽略了)。

代码语言:javascript
复制
public boolean isValidating()
Indicates if this SAXParserFactory is configured to produce parsers that validate
XML documents as they are parsed.

但是,如果您查看Xerces:org.apache.xerces.jaxp.SAXParserFactoryImpl的实现,您会注意到它们内部使用验证设置(isValidationsetValidating)来进行验证功能。

  • setFeature 如果(name.equals(VALIDATION_FEATURE)) {setValidating(值);返回;}
  • getFeature 如果(name.equals(VALIDATION_FEATURE)) {返回isValidating();}

或者如果你看看太阳源

代码语言:javascript
复制
public void setValidating(boolean validating) {
    putInFeatures(VALIDATION_FEATURE, validating);
}

(示例来自openjdk-6-src-b31-15_apr_2014)

另一个是来自Oracle XDK的oracle xmlparserv2。

一些示例测试来证明这一点(您需要oracle xmlparserv2 jar,并且您还需要一个只有这个org.apache.xerces.jaxp.SAXParserFactoryImplorg.apache.xerces.jaxp.SAXParserFactoryImpl文件,因为oracle是.(相当占优势)

代码语言:javascript
复制
public class SaxParserTest {
    @Test
    public void validationFeatureTestXerces() throws Exception {
        SAXParserFactory parserFactory = org.apache.xerces.jaxp.SAXParserFactoryImpl.newInstance();

        parserFactory.setFeature("http://xml.org/sax/features/validation", false);
        Assert.assertFalse(parserFactory.isValidating());
        parserFactory.setFeature("http://xml.org/sax/features/validation", true);
        Assert.assertTrue(parserFactory.isValidating());

        parserFactory.setValidating(true);
        Assert.assertTrue(parserFactory.getFeature("http://xml.org/sax/features/validation"));
        parserFactory.setValidating(false);
        Assert.assertFalse(parserFactory.getFeature("http://xml.org/sax/features/validation"));
    }

    @Test
    public void validationFeatureTestOracle() throws Exception {
        SAXParserFactory parserFactory = oracle.xml.jaxp.JXSAXParserFactory.newInstance();

        parserFactory.setFeature("http://xml.org/sax/features/validation", false);
        Assert.assertFalse(parserFactory.isValidating());
        parserFactory.setFeature("http://xml.org/sax/features/validation", true);
        Assert.assertTrue(parserFactory.isValidating());

        parserFactory.setValidating(true);
        Assert.assertTrue(parserFactory.getFeature("http://xml.org/sax/features/validation"));
        parserFactory.setValidating(false);
        Assert.assertFalse(parserFactory.getFeature("http://xml.org/sax/features/validation"));
    }

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

https://stackoverflow.com/questions/14853292

复制
相关文章

相似问题

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