2014-04-24 36 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)] –