2016-05-24 13 views
4

Я следующий входной XMLИзвлечение значения атрибутов в XML с помощью XPath в PIG

<Type> 
    <Source>   
     <TimeStamp>2016-02-19T12:27:06.387Z</TimeStamp> 
     <IPAddress IPVersion="IPv4">x.xx.xxx.xxx</IPAddress> 
     <Port>64435</Port> 
     <DNS_Name>x.xx.xxx.xxx.range9-27.abc.com</DNS_Name> 
    </Source> 
</Type> 

Я пытаюсь получить все значения из указанных выше тегов, используя ниже код.

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

     A = LOAD 'test.xml' using org.apache.pig.piggybank.storage.XMLLoader('Type') as (x:chararray); 
     B = FOREACH A GENERATE 
           XPath(x, 'Source/TimeStamp') 
           ,XPath(x, 'Source/IPAddress') 
           ,XPath(x, 'Source/IPAddress/@IPVersion') 
           ,XPath(x, 'Source/Port') 
           ,XPath(x, 'Source/DNS_Name'); 

Когда я сбрасываю B, я получаю следующий вывод, где отсутствует значение IPVersion.

(2016-02-19T12:27:06.387Z,x.xx.xxx.xxx,,64435,x.xx.xxx.xxx.range9-27.abc.com) 

Может кто-нибудь, пожалуйста, помогите мне решить это?

+0

Я думаю, из XPathВсего вы можете достичь этого. PLS см. мой ответ –

+0

Если это хорошо ... можете ли вы отметить «принято владельцем» также –

ответ

3

Есть 2 ошибки в XPath классе PiggyBank в:

  1. логические разрывы ignoreNamespace ищут XML атрибуты https://issues.apache.org/jira/browse/PIG-4751

  2. Параметр ignoreNamepace умолчанию является истинным и не могут быть перезаписаны https://issues.apache.org/jira/browse/PIG-4752

см. Работу с XPathAllhere

+0

Спасибо за ответ. Вы могли бы назвать имя класса для XpathALL? Потому что я получаю сообщение об ошибке, а Define XpathALL alise. – Sathyaraj

+0

https://pig.apache.org/docs/r0.15.0/api/org/apache/pig/piggybank/evaluation/xml/XPathAll.html –

+0

piggybank-0.12.0.jar имеет этот класс, и вам нужно проверить ваша версия jar имеет этот класс или нет –

Смежные вопросы