2010-07-06 54 views
2

我有下面的XML:使用XPath在價值選擇具有一定的象徵元素

 <ZMARA SEGMENT="1"> 
      <MATERIAL>000000000030001004</MATERIAL> 
      <PRODUCT_GROUP>14000IAA</PRODUCT_GROUP> 
      <PRODUCT_GROUP_DESC>HER 30 AR NEW Size</PRODUCT_GROUP_DESC> 
      <CLASS_CODE>I046</CLASS_CODE> 
      <CLASS_CODE_DESC>Heritage 30</CLASS_CODE_DESC> 
      <CHARACTERISTICS_01>,001,PLANNING_ALERT_PERCENTAGE, 50.000,PLANNI</CHARACTERISTICS_01> 
      <CHARACTERISTICS_02>X,001,COLOR_ATTRIBUTE,Weathered Wood,WEWD,Col</CHARACTERISTICS_02> 
      <CHARACTERISTICS_03>,001,ARMA_UOM,SALES SQUARE,SSQ,ARMA UNIT OF M</CHARACTERISTICS_03> 
      <CHARACTERISTICS_04>,001,ARMA_A_CATEGORY,05-Below 260 Lam/Multi-l</CHARACTERISTICS_04> 
     </ZMARA> 

使用XPath我需要選擇CHARACTERISTICS_XX元素,其值包含COLOR_ATTRIBUTE令牌。它並不總是特性_02。謝謝您的幫助。我是XPath的總noob。

回答

6

這看起來像從SAP IDOC採取的,你也許可以幸運的是,fieldnamed不是6個字符長的縮寫:)

答案由自旋子給是正確的,但是如果有可能是包含文本「COLOR_ATTRIBUTE」另一個元素,這會給出一個更具體的匹配:

/ZMARA/*[starts-with(local-name(.), 'CHARACTERISTICS_')][contains(.,'COLOR_ATTRIBUTE')] 

另一個建議是如果知道ZMARA元素可以出現的位置,則可以避免使用'//'表達式。在上面的表達式中,ZMARA只會作爲根元素進行搜索,這會更高效。

+0

這看起來不錯。我會用它。而且這是SAP IDOC數據。謝謝您的幫助。 – mpenrow 2010-07-07 00:59:10

3

這應該工作:

//ZMARA/*[contains(.,'COLOR_ATTRIBUTE')] 
+0

感謝您的幫助。 – mpenrow 2010-07-07 00:58:07