我刚刚编写了一个简单的 XML 文件:
<main>
<foo>
<bar>1</bar>
<bar>2</bar>
<bar>3</bar>
</foo>
</main>
我只是尝试用以下代码计算
bars
内的foo
:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
InputStream is = new FileInputStream(FILE);
DocumentBuilder db = dbf.newDocumentBuilder();
dbf.setIgnoringElementContentWhitespace(true);
Document doc = db.parse(is);
NodeList bars = doc.getElementsByTagName("foo").item(0).getChildNodes();
System.out.println(bars.getLength());
令我困惑的是,我在控制台中打印了
7
。然后我在调试器中检查了 NodeList 中的内容(附有屏幕截图)。解析器显然从换行符和空格中生成了一些节点。
当我将 XML 替换为没有任何格式(且可读性较差)的文件时,我得到了预期的结果
3
打印出来。这是另一个 XML:
<main><foo><bar>1</bar><bar>2</bar><bar>3</bar></foo></main>
我找不到任何有关该行为的信息。它不被认为可以用于格式化的 XML 文件吗?甚至
dbf.setIgnoringElementContentWhitespace(true)
也不起作用。
仅包含空格的文本节点通常很重要:考虑
<para>A <adj>great</adj> <adj>green</adj> <noun>dragon</noun>.</para>
因此,如果您的应用程序希望将空格视为无关紧要,那么您通常必须明确告诉解析器将其丢弃。不同的 XML API 有不同的方法来执行此操作。