我正在尝试以以下形式拆分传入的消息:
<Items>
<BatchID>123</BatchID>
<Item>...</Item>
<Item>...</Item>
<Item>...</Item>
</Items>
我已经有一个带有XML拆卸器的管道,该管道采用项目架构并输出项目模式。在项目架构上,信封属性设置为true
," Body XPath"属性指向项目元素。
但是,当我尝试处理文件时,我会收到错误: Finding the document specification by message type "BatchID" failed. Verify the schema deployed properly.
,大概是因为它只是期望的项目元素,并且不知道该如何处理批处理元素。
如果我使批处理成为项目元素的属性(就像一个明智的人一样),则一切正常。不幸的是,我坚持布局。
目前,我不在乎批处理的价值是什么。
我该如何拆分消息?
afaik xml拆卸器始终提取指定的body_xpath
元素的所有子节点 - 能够代替指定项目XPath是一个不错的功能:(。
您可以通过以下任务解决此限制:
- 为不良的
<BatchID>
元素创建一个模式,然后只吃它的实例,例如使用tomasr的null适配器创建订阅发送端口 - 或在删除信封之前,在接收端口上的地图中转换信封,其中转换将不需要的
Batch
元素剥离
以下XSLT应该可以解决:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:var="http://schemas.microsoft.com/BizTalk/2003/var" exclude-result-prefixes="msxsl var" version="1.0" xmlns:ns0="http://BizTalk_Server_Project3.Envelope">
<xsl:output omit-xml-declaration="yes" method="xml" version="1.0" />
<xsl:template match="/">
<xsl:apply-templates select="/ns0:Items" />
</xsl:template>
<xsl:template match="/ns0:Items">
<ns0:Items>
<!--i.e. Copy all Item elements and discard the Batch elements-->
<xsl:copy-of select="ns0:Item"/>
</ns0:Items>
</xsl:template>
</xsl:stylesheet>
请参阅此处有关如何将BTM从视觉地图转换为XSLT