对于下面的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,)
答案 0 :(得分:1)
id
是<book>
的属性,因此您应该能够使用更简单的XPath:
book/@id
您尝试过的XPath中的核心问题可能是/
之前的book
。 XPath开头的/
始终引用文档节点。因此,在您的情况下,只有book
是根元素节点,或者您提到从根到book
的完整路径,例如/catalog/book/price/../@id
,它才有效。要解决此问题,您可以删除/
,如上面第一个XPath中所示,或添加.
以使其相对于当前上下文节点:./book/@id
。