Java 的 XML 解析器太宽容了

Phl*_*lip 1 java xml

我正在编写测试,因此我需要一个 XML 解析器来检测任何可能的与允许的语法的偏差。

尽管此代码包含>>

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(false);
DocumentBuilder builder = factory.newDocumentBuilder();
String oops = "<xml><oops></oops>></xml>";
ByteArrayInputStream stream = new ByteArrayInputStream(oops.getBytes());
builder.parse(stream);
Run Code Online (Sandbox Code Playgroud)

如何提高语法检查级别?抱怨任何事情,而不仅仅是>>我能找到的一点点?

(请注意,虽然本文的其他读者可能对可以做到这一点的第三方库感兴趣,但我只能使用它javax来防止项目中失控的依赖项)

Ste*_*n C 5

您将无法配置(正确实现的)XML 解析器来拒绝>示例中不需要的内容。根据XML 规范,>此时A是允许的:

右尖括号 ( >)可以使用字符串 " &gt;" 表示,并且为了兼容性,当它出现在内容中的字符串 " " 中且该字符串不标记结束时,必须使用 " &gt;" 或字符引用进行转义]]>的一个CDATA部分。

因此,如果您想检测无关的内容,>则需要对元素内容进行一些额外的检查。

如果您想要/需要区分元素内容中的(意外)>字符和(有意)字符,这将很困难。&gt;XML 解析器会>在解析过程中将它们规范化,我不知道是否有办法阻止它这样做。