获取空值,同时使用Pig解析XML

问题描述:

我有一个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文件,我想解析所有的值。

你可以试试吗?

要打印的 '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

可以执行此操作

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