2014-11-05 33 views
0

我有一個XML文件,如下所示。我使用XMLLOader加載XML。它工作正常。但是,儘管獲取的值它給空值:獲取空值,同時使用Pig解析XML

<mfh> 
    <f></f> 
    <sn>***</sn> 
    <st>****</st> 
    <vnr>****</vnr> 
    <cb>***</cb> 
</mfh> 
<md> 
    <nei> 
     <ne>***</ne> 
     <k>***</k> 
     <n>***</n> 
    </nei> 
    <mi> 
     <mts>**</mts> 
     <g>**</g> 
     <mv> 
      <m>***</m> 
     </mv> 
    </mi> 
    ..... 
    ..... 
</md> 

我的豬腳本如下:

REGISTER '/usr/lib/pig/piggybank.jar' 
a = load '/user/root/sample.xml' using org.apache.pig.piggybank.storage.XMLLoader('mfh') as (doc:chararray); 
dump input_xml; 
b = foreach input_xml generate FLATTEN(REGEX_EXTRACT_ALL(doc,'<mfh>\\s*<ffv>(.*)</ffv>\\s*</mfh')); 
dump required_tags; 

腳本的輸出如下:

它不givning任何錯誤,但輸出是()。我已經更新了XML文件,我想解析所有的值。

回答

0

你可以試試嗎?

要打印的 'FFV' 屬性的值,按您的例子:

required_tags = foreach input_xml generate FLATTEN(REGEX_EXTRACT_ALL(doc,'<mfh>\\s+<ffv>(.*)</ffv>.*')); 

要打印FFV的所有值,SN,ST,VN,CBT:

required_tags = foreach input_xml generate FLATTEN(REGEX_EXTRACT_ALL(doc,'<mfh>\\s+<ffv>(.*)</ffv>\\s+<sn>(.*)</sn>\\s+<st>(.*)</st>\\s+<vn>(.*)</vn>\\s+<cbt>(.*)</cbt>\\s+</mfh>')); 
+0

第二個工作是打印所有的值,但第一個不工作得到單個值 – user2572165 2014-11-05 15:34:58

+0

對我來說它的工作正常。你能粘貼input_xml的轉儲嗎? – 2014-11-05 16:16:40

+0

上面提到的XML不是完整的XML文件,它有很多其他tags.when我複製上述到單獨的XML,然後我能夠使用您的第二個解決方案獲取值。但是,當我試圖從完整的XML它不工作。 – user2572165 2014-11-06 03:28:43

0

可以執行此操作

required_tags =的foreach input_xml生成FLATTEN(REGEX_EXTRACT_ALL(DOC,'\ S *(。)\ S)\ S)\ s(。 (。*)'))AS(ffv,sn,st,vn,cbt); dump required_tags;