W3C Document.parse() 生成不存在的元素

问题描述 投票:0回答:1

我刚刚编写了一个简单的 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)
也不起作用。

java xml w3c
1个回答
0
投票

仅包含空格的文本节点通常很重要:考虑

<para>A <adj>great</adj> <adj>green</adj> <noun>dragon</noun>.</para>

因此,如果您的应用程序希望将空格视为无关紧要,那么您通常必须明确告诉解析器将其丢弃。不同的 XML API 有不同的方法来执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.