在下面的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>
答案 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