具有任何名称空间前缀

时间:2015-05-18 08:13:50

标签: xpath osb

请您帮我解决这个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'之类的东西或者获取服务元素引用属性值的最佳方法。

提前致谢。

1 个答案:

答案 0 :(得分:0)

尝试使用contains(),如下所示:

//service[contains(@type,':ProxyRef') or contains(@type,':PipelineRef')]

另一种替代方法是使用ends-with()函数,与contains()函数相比,该函数更精确。但是,ends-with()在xpath 1.0中不可用,因此您可能需要implement it yourself(可行,但xpath结果对我来说不太直观)。