XPath在C#实用程序中返回值,但在Biztalk中不在Expression形状中返回

时间:2016-05-24 20:58:15

标签: c# xpath biztalk biztalk-2013

在下面的XML消息中,我可以获得' AccountNumber'使用

//*[local-name()='AccountNumber']/text()

/*[local-name()='GetFullAxxAccountNoResponse']/*[local-name()='GetFullAxxAccountNoResult']/*[local-name()='FullAxxAccNo']/*[local-name()='FullAxxAccountNo']/*[local-name()='AccountNumber']

这在C#测试应用程序或Notepad ++ XPath插件中运行良好,但在BizTalk表达式形状中使用时它不会返回任何内容,任何人都可以帮助实现这一点吗?我也尝试在顶级节点中包含命名空间但没有运气。

表达形状代码:

vAccount = xpath(mymessage.body, "either one of the xpath statements above")

实例:

<GetFullAxxAccountNoResponse xmlns="http://temp.org/">
    <GetFullAxxAccountNoResult>
       <FullAxxAccNo>
           <FullAxxAccountNo>
               <AccountNumber>123456</AccountNumber>
           </FullAxxAccountNo>
       </FullxxAccNo>
    <SuccessFlag>success</SuccessFlag>
    <Message />
    </GetFullAxxAccountNoResult>
</GetFullAxxAccountNoResponse>

2 个答案:

答案 0 :(得分:2)

这些xPath本身将返回一个Node。要获取文本内容,您应使用以下格式:

  

xpath(myMessage,&#34; string(// * [local-name()=&#39; SomeElement&#39;] / text())&#34;)

答案 1 :(得分:1)

而不是使用/ text()。它返回一个文本节点。你应该使用string()函数将节点转换为字符串。

所以

xpath(mymessage.body, "string(//*[local-name()='AccountNumber'])")

应该有效。

另外。如果您在biztalk应用程序中为此消息定义了架构。将此字段提升为架构中的区分字段将使您的表达式看起来更干净。您可以像这样访问此字段:

vAcccount = mymessage.AccountNumber