我们倾向于将TPE用于BAM跟踪,因为它可以独立于我们的业务流程进行部署。
但是,在我们的过程中的某个时刻,我们需要跟踪消息有效负载属性,该属性与消息的根XML元素具有1:N的关系。
尽管存在1:N关系,但只提取此属性的第一个值就足以满足我们的跟踪需求。
像往常一样,如果我们尝试跟踪此消息,则会记录以下XLANG消息:
AmbiguousXPathException - The result set for the XPath expression ...
contains more than a single node
我们尝试直接修改BTT XPath以仅选择此属性的第一个实例
我试过
'XPath="//*[local-name()='Property' and namespace-uri()='{URI}' ...]/[1]'
然后得到错误“表达式必须评估到节点集”
更简单
'//Property[1]' and '//Property[position() = 1]'
没有错误,但这也不会拉出我的财产。
最后,有人能解释BTT文件中XPath和SomXPath之间的区别吗?
答案 0 :(得分:3)
这就像在黑暗中拍摄而没有提供任何XML文档,但你可以试试这个:
(//*[local-name()='Property' and namespace-uri()='{URI}' ...])[1]
这是一个常见问题解答,//x[1]
没有选择一个节点,(//x)[1]
会这样做。
第一个意味着:名为x
的每个元素,即其父元素的第一个子元素。
第二个意味着:文档中的第一个元素x
。