请您帮我解决这个xpath表达式评估
我正在寻找代理引用。在xml文件中,引用将存储为:
XML文件的一种方式将具有如下引用:
con1:service ref="MyProject/ProxyServices/service1"
xsi:type="con2:PipelineRef" xmlns:ref="http://www.bea.com/wli/sb/reference"/
此处在xml文件中名称空格为:
xmlns:con1="http://www.bea.com/wli/sb/stages/config"
xmlns:con2="http://www.bea.com/wli/sb/pipeline/config"
XML的另一种方式将具有如下引用。
con1:service ref="MyProject/ProxyServices/service2"
xsi:type="ref:ProxyRef" xmlns:ref="http://www.bea.com/wli/sb/reference"/
此处在xml文件中名称空格为:
xmlns:con1="http://www.bea.com/wli/sb/stages/config"
xmlns:ref="http://www.bea.com/wli/sb/reference"
我使用过这个xpath表达式,这不是获取引用服务值,请你帮忙解决它的问题。
"//service[@type= @*[local-name() ='ProxyRef' or @type=@*[local-name() ='PipelineRef']]/@ref"
当我这样使用时它正在工作但是,当xml文件中有多个引用时,名称空间前缀会保持更改。
"//service[@type='ref:ProxyRef'or @type='con:PipelineRef' or @type='con1:PipelineRef' or @type='con2:PipelineRef' or @type='con3:PipelineRef' ...@type='con20:PipelineRef' ]/@ref";
现在这里基本上类型属性PipelineRef继续将名称空间前缀从con更改为con(n)。现在我正在寻找支持@type='*:PipelineRef'
或@type='con*:PipelineRef'
之类的东西或者获取服务元素引用属性值的最佳方法。
提前致谢。
答案 0 :(得分:0)
尝试使用contains()
,如下所示:
//service[contains(@type,':ProxyRef') or contains(@type,':PipelineRef')]
另一种替代方法是使用ends-with()
函数,与contains()
函数相比,该函数更精确。但是,ends-with()
在xpath 1.0中不可用,因此您可能需要implement it yourself(可行,但xpath结果对我来说不太直观)。