java - java DOM XML 解析的不同结果

标签 java xml dom

我使用 DOM 解析器来解析 XML 文件。我使用格式化的 xml 和未格式化的 xml 文件作为输入。

已格式化

<students>
    <student>
        <name>Vicky</name>
    </student>
    <student>
        <name>John</name>
    </student>
</students>

未格式化

<students><student><name>Vicky</name></student><student><name>John</name></student></students>

当运行下面的代码来获取子元素时,我得到了不同的结果。

public class XmlTest {
    public static void main(String[] args) {
        try {
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            dbFactory.setNamespaceAware(true);
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(new InputSource(new FileInputStream("testFile.xml")));
            doc.getDocumentElement().normalize();
            Element mainEle = doc.getDocumentElement();
            NodeList nodes = mainEle.getChildNodes();
            System.out.println("No.of Childs = " + nodes.getLength());
        } catch (ParserConfigurationException | SAXException | IOException e) {
            System.out.println("Error " + e);
        }
    }
}

结果是;

对于格式化 XML:5

未格式化:2

为什么相同内容的xml会有不同的结果?

最佳答案

创建格式的空白由 text() 节点组成。它们在未格式化的 XML 中丢失。

在未格式化的文档中,根目录有 1 个 student 子级。在格式化的节点中,还有 3 个 text() 节点:学生之前、学生之间和学生之后。

xsh 中验证:

open file.xml ;
for /students/node() echo name() xsh:if(self::text(), 'text', '') ;

 text
student
 text
student
 text

关于java - java DOM XML 解析的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33954539/

相关文章:

java - 无法访问线程 run() 中的方法

java - 更改 File 对象中最深目录的名称

javascript - 如何以 HTML 格式输出 XML

java - 对具有任意属性的 HTML 文件的限制

javascript - 动态创建 dom 元素或隐藏/显示

javascript - 在调整窗口大小时更改 html 标签结构

javascript - 如何将动态对象附加到 HTML 元素?

java - 如何在 Android 中使用小空格作为数字分隔符?

java - 使用 Guice 为可重用组件注入(inject)不同的实例

java - 使用 XSLT 删除 PrettyPrint