如何在Pig中使用Xpath提取xml属性?

时间:2015-09-25 19:57:10

标签: xpath xml-parsing attributes apache-pig

我想使用Pig Latin从xml中提取属性。

这是xml文件的示例

<CATALOG>
<BOOK>
<TITLE test="test1">Hadoop Defnitive Guide</TITLE>
<AUTHOR>Tom White</AUTHOR>
<COUNTRY>US</COUNTRY>
<COMPANY>CLOUDERA</COMPANY>
<PRICE>24.90</PRICE>
<YEAR>2012</YEAR>
</BOOK>
</CATALOG>

我使用过这个脚本,但它不起作用:

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

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

B = FOREACH A GENERATE XPath(x, 'BOOK/TITLE/@test'), XPath(x, 'BOOK/PRICE');
dump B;

输出结果为:

(,24.90)

我希望有人可以帮助我。 感谢。

1 个答案:

答案 0 :(得分:1)

piggybank的XPath类中有2个错误:

  1. ignoreNamespace逻辑中断了对XML属性的搜索 https://issues.apache.org/jira/browse/PIG-4751

  2. ignoreNamepace参数默认为true且无法覆盖 https://issues.apache.org/jira/browse/PIG-4752

  3. 以下是我使用XPathAll的解决方法:

    XPathAll(x, 'BOOK/TITLE/@test', true, false).$0 as (test:chararray)
    

    此外,如果您仍需要忽略名称空间:

    XPathAll(x, '//*[local-name()=\'BOOK\']//*[local-name()=\'TITLE\']/@test', true, false).$0 as (test:chararray)