XML Java读取节点?

XML Java读取节点?,java,xml,nodes,Java,Xml,Nodes,这是我第一次用Java处理XML文件 我有一个简单的XML文件: <?xml version="1.0" encoding="UTF-8"?> <ItemList> <Item id="1"> <Clothes> <element1>Test Cloth</element1> <element2>1</e

这是我第一次用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>

试验布
1.
真的
1.
100
4.
假的
爪哇:

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(“项目”);
对于(int i=0;i
我的输出是:

项目

text#

为什么我无法获取子节点?项的子节点应为“衣服”


谢谢你的支持

这是因为您的输入XML是缩进的,因此它有空格字符。
Item
的第一个子元素实际上是一个文本节点,包含
Item
之间存在的所有空格/制表符/换行符。此
元素有一个子元素:

它们是文本节点(),包含所有空格字符,直到下一个不同类型的节点。当您使用诸如
getFirstChild()
之类的方法返回
Node
时,您将获得第一个
节点,无论其类型如何。您不能总是假定它将是一个元素,除非在解析源文档时已将元素之间的所有空格分条。它仍然可能不是文档节点,并且节点也算为子节点

访问子元素节点的安全方法是测试节点是否实际上是元素。您可以将通过方法获得的节点类型与
节点
界面中表示节点类型的常数进行比较,并跳过非元素的节点

if(node.getNodeType() == Node.ELEMENT_NODE) { 
    // this is an element!
    Element myElement = (Node)node;
}
您还可以使用其他API,如DOM4J或JDOM,其中包括返回子元素的额外方法、标准XPath API(其中可以获取元素的节点列表作为结果)或标准DOM方法(例如可以从上下文元素引用中调用并从子树中获取所有子元素)

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

<Item id="1"><Clothes>...</Clothes></Item>
<Item id="1">
     <Clothes>...</Clothes> 
</Item>
<Item id="1">[#
#####]<Clothes>...</Clothes>[#]
</Item>
if(node.getNodeType() == Node.ELEMENT_NODE) { 
    // this is an element!
    Element myElement = (Node)node;
}