XPath 是正确的并且工作正常,我认为问题在于
list.item(i).getChildNodes().item(0).getTextContent());
获取与 XPath 匹配的节点的第一个子节点,在带有空格的 XML 的情况下是紧随其后的空格<employee>
,而在没有空格的 XML 的情况下是<name>
元素。
换句话说,在有空格的情况下,第一个employee
元素的子节点是(每行一个):
[spaces]
<name> . . . </name>
[spaces]
<company-no> . . . </company-no>
[spaces]
<chunk-id> . . .</chunk-id>
在没有空格的情况下,它们是:
<name> . . . </name>
<company-no> . . . </company-no>
<chunk-id> . . .</chunk-id>
所以在第一种情况下,您需要的子节点是 1、3 和 5,在第二种情况下是 0、1 和 2。
我认为你应该修改这段代码:
System.out.println("Name: " +list.item(i).getChildNodes().item(0).getTextContent());
System.out.println("Company: "+list.item(i).getChildNodes().item(1).getTextContent());
System.out.println("Chunk: "+list.item(i).getChildNodes().item(2).getTextContent());
要么使用其他 XPath 来获取名称、公司和块子节点,要么跳过包含空格的子节点。