如何用xpath提取父节点的属性值?

时间:2016-05-18 11:37:03

标签: xml xpath

对于下面的xml文件,如何使用xpath提取book id的值?

<catalog>
  <book id="bk101">
    <author>Gambardella, Matthew</author>
    <title>XML Developer's Guide</title>
    <genre>Computer</genre>
    <price>
       <amount>25</amount>
       <tax>12</tax>
       <total>37</total>
    </price>
    <publish_date>2000-10-01</publish_date>
    <description>An in-depth look at creating applications with XML</description>
  </book>
</catalog>

我使用以下代码:

REGISTER hdfs:///user/iahlu/piggy.jar ;

DEFINE XPath org.apache.pig.piggybank.evaluation.xml.XPath();

A =  LOAD '/user/iahlu/books.xml' using org.apache.pig.piggybank.storage.XMLLoader('book') as (x:chararray);


B = FOREACH A GENERATE XPath(x, 'book/price/amount'),XPath(x,'/book/price/../@id');
dump B;

但是,我的输出提取了金额,而id字段保持空白。我在代码中缺少什么?

(25,)
(23,)
(27,)
(21,)
(31,)

1 个答案:

答案 0 :(得分:1)

id<book>的属性,因此您应该能够使用更简单的XPath:

book/@id

您尝试过的XPath中的核心问题可能是/之前的book。 XPath开头的/始终引用文档节点。因此,在您的情况下,只有book是根元素节点,或者您提到从根到book的完整路径,例如/catalog/book/price/../@id,它才有效。要解决此问题,您可以删除/,如上面第一个XPath中所示,或添加.以使其相对于当前上下文节点:./book/@id