提问人:Mario P. Waxenegger 提问时间:8/24/2023 最后编辑:Mario P. Waxenegger 更新时间:8/25/2023 访问量:39
W3C Document.parse() 生成不需要的元素
W3C Document.parse() produces unwanted elements
问:
我只是制作了一个简单的XML文件:
<main>
<foo>
<bar>1</bar>
<bar>2</bar>
<bar>3</bar>
</foo>
</main>
我只是试着用这个代码来计算内部:bars
foo
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setIgnoringElementContentWhitespace(true);
InputStream is = new FileInputStream(FILE_FORMATTED);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(is);
NodeList bars = doc.getElementsByTagName("foo").item(0).getChildNodes();
System.out.println(bars.getLength());
令我困惑的是,我被打印在控制台中。然后,我在调试器中检查了 NodeList 中的内容(附加屏幕截图)。解析器显然会从换行符和空格中生成一些节点。7
当我将 XML 换成没有任何格式(且可读性较差)的文件时,我打印了预期的结果。下面是另一个 XML:3
<main><foo><bar>1</bar><bar>2</bar><bar>3</bar></foo></main>
我找不到任何关于这种行为的信息。它是否不被视为用于格式化的 XML 文件?甚至没有用。dbf.setIgnoringElementContentWhitespace(true)
答:
1赞
Michael Kay
8/25/2023
#1
通常,仅空格文本节点很重要:考虑
<para>A <adj>great</adj> <adj>green</adj> <noun>dragon</noun>.</para>
因此,如果你的应用程序想要将空格视为无关紧要,你通常必须明确地告诉解析器将其丢弃。不同的 XML API 具有不同的执行此操作的方法。
评论
setIgnoringElementContentWhitespace()
newDocumentBuilder()