gpt4 book ai didi

java - parser.setFeature 与 parser.setValidating

转载 作者:数据小太阳 更新时间:2023-10-29 02:36:15 27 4
gpt4 key购买 nike

以下有什么区别:

parser.setFeature("http://xml.org/sax/features/validation",true);
and
parser.setFeature("http://apache.org/xml/features/validation/schema",true);
and
parser.setValidating(true);

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

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

最佳答案

我正在寻找同一个问题的答案。您可能已经找到了答案,但对于像我这样到达此线程的其他人而言。

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

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)来实现验证功能。

  • 设置功能

    else if (name.equals(VALIDATION_FEATURE)) {
    setValidating(value);
    return;
    }
  • 获取特征

    else if (name.equals(VALIDATION_FEATURE)) {
    return isValidating();
    }

或者如果你看一下太阳源

public void setValidating(boolean validating) {
putInFeatures(VALIDATION_FEATURE, validating);
}

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

另一个是来自 Oracle XDK 的 oracle xmlparserv2

一些示例测试来证明这一点(您需要 oracle xmlparserv2 jar,您还需要一个 META-INF/services/javax.xml.parsers.SAXParserFactory 文件,只有这个 org.apache.xerces.jaxp.SAXParserFactoryImpl 因为 oracle jar 是......相当占主导地位)

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"));
}

}

关于java - parser.setFeature 与 parser.setValidating,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14853292/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com