gpt4 book ai didi

java - XML Java 读取 Node?

转载 作者:行者123 更新时间:2023-11-29 05:23:03 43 4
gpt4 key购买 nike

这是我第一次必须在 Java 中处理 XML 文件。

我有一个简单的 XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<ItemList>
<Item id="1">
<Clothes>
<element1>Test Cloth</element1>
<element2>1</element2>
<element3>true</element3>
<element4>1</element4>
<element5>100</element5>
<element6>4</element6>
<element7>false</element7>
</Clothes>
</Item>
</ItemList>

Java:

InputStream is = ItemsLoader.class.getResourceAsStream("ItemList.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(is);

doc.getDocumentElement().normalize();

NodeList nList = doc.getElementsByTagName("Item");

for (int i = 0; i < nList.getLength(); i++) {
Node nNode = nList.item(i);

Element eItemElement = (Element)nNode;
Node elementNode = eItemElement.getFirstChild();

System.out.println("Item Node name: " + nNode.getNodeName());
System.out.println("Element Node name: " + elementNode.getNodeName());

}

我的输出是:

项目

文本#

为什么获取不到子节点? Item 的子节点应该是 'Clothes'..

感谢支持!

最佳答案

<item>元素有一个个 child Node :

<Item id="1"><Clothes>...</Clothes></Item>

另一个有三个。其中两个是不可见的:

<Item id="1">
<Clothes>...</Clothes>
</Item>

此处显示了不可见节点(我将它们替换为 [#...#] ):

<Item id="1">[#
#####]<Clothes>...</Clothes>[#]
</Item>

它们是文本节点 ( Text ),它们包含所有空白字符,直到下一个不同类型的节点。当您使用诸如 getFirstChild() 之类的方法时返回 Node , 你会得到第一个 Node无论它的类型是什么。您不能总是假定它是一个元素,除非您在解析源文档时已将元素之间的所有空格分隔开。它仍然可能不是文档 Comment节点和 Processing Instruction节点也算作 child 。

访问子元素节点的安全方法是测试该节点是否真的是一个元素。您可以比较节点类型,您可以通过 getNodeType() 获得Node 中的方法和常量表示节点类型的接口(interface)并跳过不是元素的节点。

if(node.getNodeType() == Node.ELEMENT_NODE) { 
// this is an element!
Element myElement = (Node)node;
}

您还可以使用其他 API,例如 DOM4J 或 JDOM,它们包括返回子元素的额外方法、标准 XPath API,您可以在其中获取元素的 NodeList 作为结果,或者标准 DOM 方法,例如 getElementsByTagName您可以从您的上下文元素引用中调用它,并从您的子树中获取所有后代元素

在您的程序中,您可以检索 Clothes通过在 getChildNodes() 上迭代提取元素节点节点列表并获取节点类型与 Node.ELEMENT_NODE 匹配的第一个节点.

关于java - XML Java 读取 Node?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23896021/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com