2016-05-24 82 views
4

我有以下輸入XML提取使用XPath豬

<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> 

我試圖檢索使用下面的代碼上面的標籤的所有屬性的值在XML值。

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

我認爲從XPathAll你可以做到這一點。請看我的答案 –

+0

如果它是好的...你可以標記「所有者接受」以及 –

回答

3

有2條蟲子在撲滿的XPath類:

  1. 的ignoreNamespace邏輯斷裂搜索XML屬性 https://issues.apache.org/jira/browse/PIG-4751

  2. 的ignoreNamepace參數默認爲真,並不能覆蓋 ​​

看到工作與XPathAllhere

+0

感謝您的答案。你能否告訴XpathALL的類名?因爲在定義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版本是否有這個課程 –