以下内容之间的差异是什么:
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。
答案 0 :(得分:2)
我正在寻找同一个问题的答案。您可能已经找到了答案,但对于像我这样的其他人来说,已经找到了答案。
从我可以看到它是特定于实现的。 SAX似乎并没有真正的规范(规范是他们的网站saxproject.org)。至少我没有在spec或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,你会注意到他们在内部使用验证设置(isValidation
,setValidating
)作为验证功能。
setFeature
else if (name.equals(VALIDATION_FEATURE)) {
setValidating(value);
return;
}
getFeature
else if (name.equals(VALIDATION_FEATURE)) {
return isValidating();
}
或者如果你看一下Sun的消息来源
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.SAXParserFactoryImpl
的META-INF / services / javax.xml.parsers.SAXParserFactory文件,因为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"));
}
}