使用Xpath根据元素值查找适当的元素

时间:2010-07-12 22:34:43

标签: xpath

我有以下xml代码段

        <ZMARA01 SEGMENT="1">
            <CHARACTERISTICS_01>X,001,COLOR_ATTRIBUTE_FR,BRUN ÉCORCE,TMBR,French C</CHARACTERISTICS_01>
            <CHARACTERISTICS_02>X,001,COLOR_ATTRIBUTE,Timber Brown,TMBR,Color Attr</CHARACTERISTICS_02>
        </ZMARA01>

我正在寻找一个基于COLOR_ATTRIBUTE匹配的xpath表达式。它并不总是在CHARACTERISTIC_02中。它可能是CHARACTERISTIC_XX。另外我不想匹配COLOR_ATTRIBUTE_FR。我一直在用这个:

Transaction.Input_XML{/ZMAT/IDOC/E1MARAM/ZMARA01/*[starts-with(local-name(.), 'CHARACTERISTIC_')][contains(.,'COLOR_ATTRIBUTE')]}

这让我大部分都在那里,但它同时匹配COLOR_ATTRIBUTE和COLOR_ATTRIBUTE_FR

2 个答案:

答案 0 :(得分:1)

使用

contains(concat(',', ., ','), ',COLOR_ATTRIBUTE,')

首先用逗号括起上下文节点的字符串值,然后简单地测试这样的字符串是否包含',COLOR_ATTRIBUTE,'

因此,我们以相同的单一方式处理所有情况(字符串开头处的模式,字符串末尾的模式以及开始或结束时的模式)。

答案 1 :(得分:0)

如果保证COLOR_ATTRIBUTE不在第一个或最后一个位置,您可以使用[contains(.,',COLOR_ATTRIBUTE,')],否则您可以使用[contains(.,'COLOR_ATTRIBUTE') and not contains(.,'COLOR_ATTRIBUTE_FR')]之类的内容。