在列表中的节点中选择XPath元素

时间:2016-03-09 19:39:20

标签: java xml xpath dom4j

我的XML包含客户节点列表;我已经使用dom4j成功执行了一个语句,该语句生成了这些节点的列表。我现在正试图遍历列表以构建包含这些节点所代表的对象的第二个列表。

我有以下方法:

public String getXPathValue(Node node, int ... indices)
{
    System.out.println(node.asXML()); // debug
    XPath xPath = getXPath(indices);
    System.out.println(xPath.getText());  // debug
    Node tokenNode = xPath.selectSingleNode(node);
    System.out.println(tokenNode == null ? "null" : "not null"); // debug

    xPath = new DefaultXPath("./AccountNumber");  // debug
    tokenNode = xPath.selectSingleNode(node);     // debug
    System.out.println(tokenNode == null ? "null" : "not null"); // debug

    String result = (tokenNode == null) ? "" : tokenNode.getText();
    return result;
}

我在这里有一个无用的重复,在调试时添加了。我们的想法是xPath将从此节点中选择一个值,tokenNode.getText()调用将获取该节点的该元素的文本并将其返回。

node.asXML()调用产生以下内容:

<Item xmlns="http://webservices.xyz.com/Customer/1.0">
  <AccountNumber>123</AccountNumber>
  <CustomerID>
    <AuthenticatedKey>123</AuthenticatedKey>
    <ID>123</ID>
  </CustomerID>
  <CustomerName>TEST customer</CustomerName>
</Item>

xPath.getText()调用产生了这个:

/cust:Item/cust:AccountNumber

其中&#39; cust&#39;已添加到XPath映射的命名空间中作为&#34; http://webservices.xyz.com/Customer/1.0&#34;。

但tokenNode最终为null。我尝试了一个&#34; / Item / AccountNumber&#34;的XPath。 (即,没有名称空间指定&#34;),tokenNode仍为空。我试过&#34; ./ AccountNumber&#34;和&#34; ./ cust:AccountNumber&#34;,也不成功。

现在,该节点是从一个更大的文档中获得的,但我一直在假设,因为我的节点以<Item>开头,我只需要为此节点输入XPath信息。 / p>

有人可以解释一下我在这里做错了吗?

0 个答案:

没有答案