BizTalk BAM - 手动编辑BTT XPath只返回Message Payload属性的第一个实例?

时间:2010-06-25 09:02:00

标签: xml xpath biztalk biztalk-bam

我们倾向于将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之间的区别吗?

1 个答案:

答案 0 :(得分:3)

这就像在黑暗中拍摄而没有提供任何XML文档,但你可以试试这个:

(//*[local-name()='Property' and namespace-uri()='{URI}' ...])[1]

这是一个常见问题解答//x[1]没有选择一个节点,(//x)[1]会这样做。

第一个意味着:名为x的每个元素,即其父元素的第一个子元素。

第二个意味着:文档中的第一个元素x