我有以下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
答案 0 :(得分:1)
使用强>:
contains(concat(',', ., ','), ',COLOR_ATTRIBUTE,')
首先用逗号括起上下文节点的字符串值,然后简单地测试这样的字符串是否包含',COLOR_ATTRIBUTE,'
。
因此,我们以相同的单一方式处理所有情况(字符串开头处的模式,字符串末尾的模式以及开始或结束时的模式)。
答案 1 :(得分:0)
如果保证COLOR_ATTRIBUTE不在第一个或最后一个位置,您可以使用[contains(.,',COLOR_ATTRIBUTE,')]
,否则您可以使用[contains(.,'COLOR_ATTRIBUTE') and not contains(.,'COLOR_ATTRIBUTE_FR')]
之类的内容。