2014-04-24 41 views
0

需要關於Xpath表達式的幫助。我有以下XML:需要關於Xpath表達式的幫助

<ldaConfigTblV4_0> 
<Value> 
    <LDA_CONFIG_T_V4> 
    <CONFIG_ATTRB_VALUE>90</CONFIG_ATTRB_VALUE> 
    <BOX_LABEL> 
     <Value> 
     <TIEGROUP>1</TIEGROUP> 
     <LABEL_TEMPLATE>LABEL_TEMPLATE</LABEL_TEMPLATE> 
     <GTINTYPE>TEST GTINTYPE</GTINTYPE> 
     <GTINVALUE>1</GTINVALUE> 
     <MODELNUM>TEST MODELNUM</MODELNUM> 
     <MODELDESCRIPTION>TEST MODELDESC</MODELDESCRIPTION> 
     <COLOR>TEST Color</COLOR> 
     <COUNTRY>TEST COUNTRY</COUNTRY>  
     </Value>   
    </BOX_LABEL> 
    <TIEGROUP>1</TIEGROUP> 
    <TIEGROUPIsNull>false</TIEGROUPIsNull> 
    <CONFIG_ATTRB_NAME>LOB</CONFIG_ATTRB_NAME> 
    <WO_ID>20015670070</WO_ID> 
    <WO_IDIsNull>false</WO_IDIsNull> 
    <WORK_ORDER_LINE_NO>1</WORK_ORDER_LINE_NO> 
    <WORK_ORDER_LINE_NOIsNull>false</WORK_ORDER_LINE_NOIsNull> 
    <SYSTEM_LABEL> 
     <Value> 
     <TIEGROUP>1</TIEGROUP> 
     <LABEL_TEMPLATE>LABEL_TEMPLATE</LABEL_TEMPLATE> 
     <GTINTYPE>TEST GTINTYPE</GTINTYPE> 
     <GTINVALUE /> 
     <MODELNUM>TEST MODELNUM</MODELNUM> 
     <MODELDESCRIPTION>TEST MODELDESC</MODELDESCRIPTION> 
     <COLOR>TEST Color</COLOR> 
     <COUNTRY>TEST COUNTRY</COUNTRY>   
     </Value>   
    </SYSTEM_LABEL> 
    <SALES_ORDER_REF>10016041740</SALES_ORDER_REF> 
    <SALES_ORDER_REFIsNull>false</SALES_ORDER_REFIsNull> 
    </LDA_CONFIG_T_V4> 
    <LDA_CONFIG_T_V4> 
    <CONFIG_ATTRB_VALUE>91</CONFIG_ATTRB_VALUE> 
    <BOX_LABEL> 
     <Value> 
     <TIEGROUP>2</TIEGROUP> 
     <LABEL_TEMPLATE>LABEL_TEMPLATE_2</LABEL_TEMPLATE> 
     <GTINTYPE>TEST GTINTYPE_2</GTINTYPE> 
     <GTINVALUE>2</GTINVALUE> 
     <MODELNUM>TEST MODELNUM_2</MODELNUM> 
     <MODELDESCRIPTION>TEST MODELDESC_2</MODELDESCRIPTION> 
     <COLOR>TEST Color_2</COLOR> 
     <COUNTRY>TEST COUNTRY_2</COUNTRY> 
     </Value>   
    </BOX_LABEL> 
    <TIEGROUP>2</TIEGROUP> 
    <TIEGROUPIsNull>false</TIEGROUPIsNull> 
    <CONFIG_ATTRB_NAME>LOB</CONFIG_ATTRB_NAME> 
    <WO_ID>20015670070</WO_ID> 
    <WO_IDIsNull>false</WO_IDIsNull> 
    <WORK_ORDER_LINE_NO>2</WORK_ORDER_LINE_NO> 
    <WORK_ORDER_LINE_NOIsNull>false</WORK_ORDER_LINE_NOIsNull> 
    <SYSTEM_LABEL> 
     <Value> 
     <TIEGROUP>2</TIEGROUP> 
     <LABEL_TEMPLATE>LABEL_TEMPLATE_2</LABEL_TEMPLATE> 
     <GTINTYPE>TEST GTINTYPE_2</GTINTYPE> 
     <GTINVALUE /> 
     <MODELNUM>TEST MODELNUM_2</MODELNUM> 
     <MODELDESCRIPTION>TEST MODELDESC_2</MODELDESCRIPTION> 
     <COLOR>TEST Color_2</COLOR> 
     <COUNTRY>TEST COUNTRY_2</COUNTRY> 
     </Value>   
    </SYSTEM_LABEL> 
    <SALES_ORDER_REF>10016041740</SALES_ORDER_REF> 
    <SALES_ORDER_REFIsNull>false</SALES_ORDER_REFIsNull> 
    </LDA_CONFIG_T_V4> 
    <LDA_CONFIG_T_V4> 
    <CONFIG_ATTRB_VALUE>90</CONFIG_ATTRB_VALUE> 
    <BOX_LABEL> 
     <Value> 
     <TIEGROUP>1</TIEGROUP> 
     <LABEL_TEMPLATE>LABEL_TEMPLATE</LABEL_TEMPLATE> 
     <GTINTYPE>TEST GTINTYPE</GTINTYPE> 
     <GTINVALUE>1</GTINVALUE> 
     <MODELNUM>TEST MODELNUM</MODELNUM> 
     <MODELDESCRIPTION>TEST MODELDESC</MODELDESCRIPTION> 
     <COLOR>TEST Color</COLOR> 
     <COUNTRY>TEST COUNTRY</COUNTRY>  
     </Value>   
    </BOX_LABEL> 
    <TIEGROUP>1</TIEGROUP> 
    <TIEGROUPIsNull>false</TIEGROUPIsNull> 
    <CONFIG_ATTRB_NAME>LOB</CONFIG_ATTRB_NAME> 
    <WO_ID>20015670070</WO_ID> 
    <WO_IDIsNull>false</WO_IDIsNull> 
    <WORK_ORDER_LINE_NO>1</WORK_ORDER_LINE_NO> 
    <WORK_ORDER_LINE_NOIsNull>false</WORK_ORDER_LINE_NOIsNull> 
    <SYSTEM_LABEL> 
     <Value> 
     <TIEGROUP>1</TIEGROUP> 
     <LABEL_TEMPLATE>LABEL_TEMPLATE</LABEL_TEMPLATE> 
     <GTINTYPE>TEST GTINTYPE</GTINTYPE> 
     <GTINVALUE /> 
     <MODELNUM>TEST MODELNUM</MODELNUM> 
     <MODELDESCRIPTION>TEST MODELDESC</MODELDESCRIPTION> 
     <COLOR>TEST Color</COLOR> 
     <COUNTRY>TEST COUNTRY</COUNTRY>   
     </Value>   
    </SYSTEM_LABEL> 
    <SALES_ORDER_REF>10016041740</SALES_ORDER_REF> 
    <SALES_ORDER_REFIsNull>false</SALES_ORDER_REFIsNull> 
    </LDA_CONFIG_T_V4> 
</Value> 
</ldaConfigTblV4_0> 

我想用不同的TIEGROUP節點LDA_CONFIG_T_V4,在這種情況下,我應該從最後節點具有相同TIEGROUP作爲第一個得到的只有前兩個LDA_CONFIG_T_V4節點。

我試過用下面的XPath表達式

ldaConfigTblV4_0/Value/LDA_CONFIG_T_V4[TIEGROUP[not(.=preceding::TIEGROUP)]] 

,但是當我有多個LDA_CONFIG_T_V4節點它不工作,如果我有一個LDA_CONFIG_T_V4節點正常工作。我試圖用ldaConfigTblV4_0/Value/LDA_CONFIG_T_V4[TIEGROUP[not(.=following::TIEGROUP)]]這個,但沒用。

+0

請注意,我使用XPath 1.0版 –

回答

1

你是非常接近的。你的想法是正確的,但你的not()是在一個不正確的位置實現你想要的。 。

ldaConfigTblV4_0/Value/LDA_CONFIG_T_V4[not(TIEGROUP = preceding::TIEGROUP)] 

更高效的一點點(使用prececing-sibling而不是preceding導致較少的節點檢查以下項目:

ldaConfigTblV4_0/Value/LDA_CONFIG_T_V4[not(TIEGROUP = preceding-sibling::LDA_CONFIG_T_V4/TIEGROUP)] 
+0

嗨Dirkk,是的,該工作得很好。感謝您的幫助。 –

+0

ldaConfigTblV4_0 /值/ LDA_CONFIG_T_V4 [否(TIEGROUP =前同輩:: LDA_CONFIG_T_V4/TIEGROUP)] –