我有n个这些类型的xml文件。
<students roll_no=1>
<name>abc</name>
<gender>m</gender>
<maxmarks>
<marks>
<year>2014</year>
<maths>100</maths>
<english>100</english>
<spanish>100</spanish>
<marks>
<marks>
<year>2015</year>
<maths>110</maths>
<english>110</english>
<spanish>110</spanish>
<marks>
</maxmarks>
<marksobt>
<marks>
<year>2014</year>
<maths>90</maths>
<english>95</english>
<spanish>82</spanish>
<marks>
<marks>
<year>2015</year>
<maths>94</maths>
<english>98</english>
<spanish>02</spanish>
<marks>
</marksobt>
</Students>
我需要输出
roll_no name gender year eng_max_marks maths_max_marks spanish_max_marks
1 abc m 2014 100 100 100
1 abc m 2015 110 110 110
我能够在单个语句中逐行检索标记,但不能用此提取roll_no和name。
A = LOAD 'student.xml' using org.apache.pig.piggybank.storage.XMLLoader('marks') as (x:chararray);
B = FOREACH A GENERATE XPath(x, 'marks/year'), XPath(x, 'marks/english'), XPath(x, 'marks/math'), XPath(x, 'marks/spanish');
此回归
year eng_max_marks maths_max_marks spanish_max_marks
2014 100 100 100
2015 110 110 110
我可以提取两个块但不知道如何加入其他字段。我不能在整个联接中使用,因为我有很多其他文件。
现在让我们使用伪造属性名称(roll_no)。如何提取剩余的节点
name gender year eng_max_marks maths_max_marks spanish_max_marks
abc m 2014 100 100 100
abc m 2015 110 110 110
我不想使用标记(1)/英语方法,因为这些节点也可以变化,并且不想采用任何肮脏的方法。
任何指针????