2010-07-06 29 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