0

我尝试将多个表的 SSIS 数据探查器任务的结果合并到一个 XML 中,以检查“数据探查器查看器”内单个文件中的结果。整个问题在这里缩小为简化的 XML 转换:

文件 1 (test_1.xml):

<a xmlns="http://schemas.microsoft.com/sqlserver/2008/DataDebugger/">
   <b id="1"/>
   <c>
      <2: any other XML-structure to come here/>
   </c>
</a>

文件 2 (test_2.xml):

<a xmlns="http://schemas.microsoft.com/sqlserver/2008/DataDebugger/">
   <b id="1"/>
   <c>
      <1: any other XML-structure to come here/>
   </c>
</a>

(元素 b 始终完全相同)

预期结果:

<a xmlns="http://schemas.microsoft.com/sqlserver/2008/DataDebugger/">
   <b id="1"/>
   <c>
      <1: any other XML-structure to come here/>
      <2: any other XML-structure to come here/>
   </c>
</a>

强烈推荐任何帮助!我将在这里提供原始问题的解决方案。

4

1 回答 1

0

另一个尝试:

<?xml version='1.0' encoding="utf-8"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:t="http://schemas.microsoft.com/sqlserver/2008/DataDebugger/"
    version="1.0">

    <xsl:output method="xml" indent="yes" omit-xml-declaration="no" version="1.0" encoding="UTF-8"/>

    <xsl:template match="t:c">
        <xsl:element name="c" namespace="http://schemas.microsoft.com/sqlserver/2008/DataDebugger/">
        <xsl:copy-of select="*" />
        <xsl:copy-of select="document('test_2.xml')//t:c/node() " />
        </xsl:element>
    </xsl:template>

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

用 xalan 检查(在环境中设置类路径)

java org.apache.xalan.xslt.Process -IN test1_1.xml -XSL test1.xslt -OUT test1_12.xml 

和撒克逊语(将脚本更改为版本 =“1.1”)

java -jar saxon-9.1.0.8j.jar -s:test_1.xml -xsl:test_1.xslt -o:test_12.xml 
于 2018-06-21T17:11:05.320 回答