0

我有一个将字符串转换为 DOM 的函数,然后在 DOM 对象上使用 javax.xml.xpath.XPathFactory 来提取数据。

XPathFactory 适用于以下字符串

<root><test><name>A</name></test><test><name>B</name></test></root>

但如果标签之间有空格,它会失败

<root> <test> <name>A</name> </test> <test> <name>B</name> </test></root>

我正在使用 XpathFactory 来准备来自 DOM 的值“A”和“B”。

当字符串在标签之间有空格时,谁能告诉我为什么 XpathFactory 会失败。

谢谢
--SD

4

2 回答 2

0

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 来获取名称、公司和块子节点,要么跳过包含空格的子节点。

于 2012-06-13T01:57:49.767 回答
0
/root/test/name

甚至只是

//name

可选地,直接获取子文本节点

//name/text()
于 2012-06-12T17:18:29.520 回答