我想将多个xml文件合并到单个xml文件中,同时发送到BizTalk中的目标文件夹。帮助我使用xslt或其他更简单的方法将多个xml文件转换为单个xml文件。请注意所有输入文件都包含相同的命名空间 输入1
<?xml version="1.0" encoding="utf-8"?>
<ns0:AssetStatusResF xmlns:ns0="http://uCustoms/IL/MC/AssetStockResF/v1.0"
xmlns:nsHeader="http://uCustoms/Common/Header/v1.0">
<Body>
<parameter>
<AssetID>KK/KDRM115/I/06/15</AssetID>
<StatusCode>D</StatusCode>
<Status>Penghapusan</Status>
<PlacementLocationCode>160101/BGN/HU/09/B12</PlacementLocationCode>
<PlacementLocation>BILIK TIMBALAN PENGARAH (PERJAWATAN)</PlacementLocation>
<PlacementDate>12/7/2008 12:00:00 AM</PlacementDate>
<DisposedDate/>
</parameter>
</Body>
</ns0:AssetStatusResF>
输入2
<?xml version="1.0" encoding="utf-8"?>
<ns0:AssetStatusResF xmlns:ns0="http://uCustoms/IL/MC/AssetStockResF/v1.0"
xmlns:nsHeader="http://uCustoms/Common/Header/v1.0">
<Body>
<parameter>
<AssetID>KK/KDRM115/H/06/4</AssetID>
<StatusCode>A</StatusCode>
<Status>Sedang Digunakan</Status>
<PlacementLocationCode>160101/BGN/HS/09/B07</PlacementLocationCode>
<PlacementLocation>BILIK PENASIHAT</PlacementLocation>
<PlacementDate>12/26/2017 12:00:00 AM</PlacementDate>
<DisposedDate/>
</parameter>
</Body>
</ns0:AssetStatusResF>
input3,4 .......继续
输出
<?xml version="1.0" encoding="utf-8"?>
<ns0:AssetStatusResF xmlns:ns0="http://uCustoms/IL/MC/AssetStockResF/v1.0"
xmlns:nsHeader="http://uCustoms/Common/Header/v1.0">
<Body>
<parameter>
<AssetID>KK/KDRM115/H/06/4</AssetID>
<StatusCode>A</StatusCode>
<Status>Sedang Digunakan</Status>
<PlacementLocationCode>160101/BGN/HS/09/B07</PlacementLocationCode>
<PlacementLocation>BILIK PENASIHAT</PlacementLocation>
<PlacementDate>12/26/2017 12:00:00 AM</PlacementDate>
<DisposedDate/>
</parameter>
<parameter>
<AssetID>KK/KDRM115/I/06/15</AssetID>
<StatusCode>D</StatusCode>
<Status>Penghapusan</Status>
<PlacementLocationCode>160101/BGN/HU/09/B12</PlacementLocationCode>
<PlacementLocation>BILIK TIMBALAN PENGARAH (PERJAWATAN)</PlacementLocation>
<PlacementDate>12/7/2008 12:00:00 AM</PlacementDate>
<DisposedDate/>
</parameter>
</Body>
</ns0:AssetStatusResF>
答案 0 :(得分:0)
这是一种方式。
创建一个文档,列出要在collection.xml中组合的文档:
<collection>
<doc href="input1.xml"/>
<doc href="input2.xml"/>
<doc href="input3.xml"/>
</collection>
然后使用collection.xml作为源文档和以下样式表进行XSLT转换:
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="collection">
<ns0:AssetStatusResF xmlns:ns0="http://uCustoms/IL/MC/AssetStockResF/v1.0">
<Body>
<xsl:copy-of select="document(doc/@href)/*/Body/parameter"/>
</Body>
</ns0:AssetStatusResF>
</xsl:template>
</xsl:transform>
这适用于XSLT 1.0。如果转到XSLT 2.0,则可以使用更灵活的方式提供输入,例如,您可以使用collection()
函数访问目录中的所有文件。
答案 1 :(得分:0)
如果您使用的是XSLT 2.0,可以使用几种替代方案。首先,您可以将文档列表定义为样式表参数,作为字符串序列传递:
<xsl:param name="docs" as="xs:string*"/>
<xsl:template match="collection">
<ns0:AssetStatusResF xmlns:ns0="http://uCustoms/IL/MC/AssetStockResF/v1.0">
<Body>
<xsl:copy-of select="document($docs)/*/Body/parameter"/>
</Body>
</ns0:AssetStatusResF>
</xsl:template>
或者您可以将文档定义为集合。 Saxon和其他一些处理器将集合URI映射到文件存储目录。在撒克逊你可以做到:
<xsl:template name="main">
<ns0:AssetStatusResF xmlns:ns0="http://uCustoms/IL/MC/AssetStockResF/v1.0">
<Body>
<xsl:copy-of select="collection('file:///c:/mydocs?select=*.xml')/*/Body/parameter"/>
</Body>
</ns0:AssetStatusResF>
</xsl:template>
最有效的方法取决于您决定处理哪些输入文档,而且您还没有真正解释过。