用于动态xml标记的Hive XPATH

时间:2016-04-21 09:57:18

标签: xpath hive

我非常糟糕地构建了大型xml来处理。示例代码如下。

  <complex>
<field name="TEST_ATTR">
  <fv>
    <t.0>
      <KOD>12000011</KOD>
      <FLAG>sX</FLAG>
    </t.0>
    <t.1>
      <KOD>s12000021</KOD>
      <FLAG>sN</FLAG>
    </t.1>
    <t.2>
      <KOD>s12000031</KOD>
      <FLAG>sN</FLAG>
    </t.2>
    <t.3>
      <KOD>s12000051</KOD>
      <FLAG>sN</FLAG>
    </t.3>
    <t.4>
      <KOD>s12000061</KOD>
      <FLAG>sN</FLAG>
    </t.4>
    <t.5>
      <KOD>s12000071</KOD>
      <FLAG>sN</FLAG>
    </t.5>
    <t.6>
      <KOD>s12000081</KOD>
      <FLAG>sN</FLAG>
    </t.6>
  </fv>
</field>
</complex>

问题1: 如何从这个xml节点名称中提取t.0等? 使用XPATH或其他一些工具?!

问题2: 如何使用动态XPATH获取<KOD>标记的值? 例: complex/fieldfv/*/KOD其中'*'表示任意。

1 个答案:

答案 0 :(得分:0)

问题1:

由于看起来您正在使用Java来执行XPath,听起来您最好的选择是选择具有不一致名称的元素,迭代它们,并使用DOM API来获取元素名称。 / p>

您可以使用此XPath来选择它们:

/complex/field/fv/*

当迭代它们时(作为Node个对象),您可以使用.getNodeName()获取每个对象的名称。

问题2:

是的,您可以使用此XPath选择所有KOD元素:

/complex/field/fv/*/KOD

但是,如果您按照问题1的答案中的建议迭代t.0t.1等节点,则更好的方法是使用每个相应的元素作为起点使用相对XPath选择其中的KOD元素:

KOD