2016-04-21 68 views
0

我已經非常糟糕的構造了大型xml來處理。下面的示例代碼。Hive XPATH for dynamic xml tags

<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: 如何從像t.0等這個XML節點名稱提取? 使用XPATH或其他一些utils?

問題2: 如何使用動態XPATH獲取<KOD>標記的值? 示例: complex/fieldfv/*/KOD其中'*'表示ANY。

+0

什麼版本的xpath? – splash58

+0

#----開始writeEnvironmentReport($ Revision:1.10 $):找到有用的東西:---- java.version = 1.8.0_51 version.xalan2x =不存在 version.JAXP = 1.4 java.ext .dirs =/usr/java/jdk1.8.0_51/jre/lib/ext:/ usr/java/packages/lib/ext version.SAX = 2.0 version.crimson =不存在 java.class.path = 。 version.ant =不存在的 version.DOM = 3.0 version.xalan1 =不存在的 version.xalan2_2 = Xalan的爪哇2.7.0 version.xerces2 =的Xerces-J 2.7.1 version.xerces1 =不可─禮物 – user6234757

+0

對不起,我的設置在這裏! – user6234757

回答

0

問題1:

因爲它看起來像你正在使用Java來執行你的XPath,這聽起來像你最好的選擇是選擇與非一致的名稱的元素,在它們之間迭代,並使用DOM API來獲取元素名稱。

您可以使用此XPath來選擇他們:

/complex/field/fv/* 

當超過他們迭代(如Node對象),您可以使用.getNodeName()得到每個人的名字。

問題2:

是的,你可以使用這個XPath來選擇所有的KOD元素:

/complex/field/fv/*/KOD 

但是,如果您遍歷t.0t.1等節點正如在問題1的答案中所建議的,更好的方法是使用每個相應的元素作爲起始點,使用相對XPath選擇其中的KOD元素:

KOD 
+0

感謝您的回答。 – user6234757