使用XPath选择值中具有特定标记的元素

时间:2010-07-06 22:24:14

标签: xpath

我有以下XML:

        <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我需要选择其值包含COLOR_ATTRIBUTE标记的CHARACTERISTICS_XX元素。它并不总是features_02。谢谢您的帮助。我是XPath的总菜鸟。

2 个答案:

答案 0 :(得分:6)

这看起来像是从sap idoc中获取的,你可能很幸运,fieldnamed不是6个字符长的缩写:)

spinon给出的答案是正确的,但是如果可能有另一个元素包含文本'COLOR_ATTRIBUTE',这将给出更具体的匹配:

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

另一个建议是如果你知道ZMARA元素可以出现在哪里,就避免使用'//'表达式,在上面的表达式中,ZMARA只会被搜索为更高效的根元素。

答案 1 :(得分:3)

这应该有效:

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