Xslt 1.0 复制以将根目录和所有子目录复制到xml数据库列

Xslt 1.0 复制以将根目录和所有子目录复制到xml数据库列,xslt-1.0,biztalk,biztalk-2016,biztalk-mapper,Xslt 1.0,Biztalk,Biztalk 2016,Biztalk Mapper,在BizTalk中,我正在尝试使用以下模式的XSLT。我调用了一个SQL存储过程,XML列前后都有一些字段,但XML列需要包含源文档中的整个XML 我尝试了两种方法,如下所示。第一个结果是根节点被复制到正确的位置,但没有子节点。我认为的副本是深度副本(而副本是浅层副本),所以不确定它为什么不递归地复制子级 尝试1: <?xml version="1.0" encoding="UTF-16"?> <xsl:stylesheet xmlns:

在BizTalk中,我正在尝试使用以下模式的XSLT。我调用了一个SQL存储过程,XML列前后都有一些字段,但XML列需要包含源文档中的整个XML

我尝试了两种方法,如下所示。第一个结果是根节点被复制到正确的位置,但没有子节点。我认为的副本是深度副本(而副本是浅层副本),所以不确定它为什么不递归地复制子级

尝试1:

<?xml version="1.0" encoding="UTF-16"?>
<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" 
version="1.0" 
xmlns:ns99="http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/DCMS_BLD1" 
xmlns:userCSharp="http://schemas.microsoft.com/BizTalk/2003/userCSharp">
    <xsl:output omit-xml-declaration="yes" method="xml" version="1.0"/>
    <xsl:template match="/">
        <xsl:element name="ns0:USP_INS_DIH_RECORD">

            <ns99:Field1>NealTest2</ns99:Field1>

            <ns99:Field2XmlColumn>
                <xsl:copy-of select="node() | @*"/>
            </ns99:Field2XmlColumn>

            <ns99:FieldCreatedDateTime>TODAY</ns99:FieldCreatedDateTime>

        </xsl:element>
    </xsl:template>
    

</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-16"?>
<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" 
version="1.0" 
xmlns:ns99="http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/DCMS_BLD1" >
    <xsl:output omit-xml-declaration="yes" method="xml" version="1.0"/>
    <xsl:template match="/">
        <xsl:element name="ns0:USP_INS_DIH_RECORD">
            <ns99:Field1>NealTest2</ns99:Field1>
            <ns99:Field2XmlColumn>
                <xsl:apply-templates select="*"/>
            </ns99:Field2XmlColumn>
            <ns99:FieldCreatedDateTime>Today</ns99:FieldCreatedDateTime>

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

</xsl:stylesheet>

NealTest2
今天
尝试2:

<?xml version="1.0" encoding="UTF-16"?>
<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" 
version="1.0" 
xmlns:ns99="http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/DCMS_BLD1" 
xmlns:userCSharp="http://schemas.microsoft.com/BizTalk/2003/userCSharp">
    <xsl:output omit-xml-declaration="yes" method="xml" version="1.0"/>
    <xsl:template match="/">
        <xsl:element name="ns0:USP_INS_DIH_RECORD">

            <ns99:Field1>NealTest2</ns99:Field1>

            <ns99:Field2XmlColumn>
                <xsl:copy-of select="node() | @*"/>
            </ns99:Field2XmlColumn>

            <ns99:FieldCreatedDateTime>TODAY</ns99:FieldCreatedDateTime>

        </xsl:element>
    </xsl:template>
    

</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-16"?>
<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" 
version="1.0" 
xmlns:ns99="http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/DCMS_BLD1" >
    <xsl:output omit-xml-declaration="yes" method="xml" version="1.0"/>
    <xsl:template match="/">
        <xsl:element name="ns0:USP_INS_DIH_RECORD">
            <ns99:Field1>NealTest2</ns99:Field1>
            <ns99:Field2XmlColumn>
                <xsl:apply-templates select="*"/>
            </ns99:Field2XmlColumn>
            <ns99:FieldCreatedDateTime>Today</ns99:FieldCreatedDateTime>

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

</xsl:stylesheet>

NealTest2
今天
评论中有人要求提供示例输入。输入应该无关紧要,因为它是一个直接副本,但这里有一个虚拟示例:

<ns0:dummy xmlns:ns0="http://myschema.dummy">
    <ns0:firstname>John</ns0:firstname>
    <ns0:lastname>Doe</ns0:lastname>
</ns0:dummy>

约翰
雌鹿
我删除了C#,并在BizTalk之外的一个站点上进行了这样的尝试:效果很好。但它没有创建与my data/xsl的可共享链接


我还将xslt中的名称空间更改为ns99,这样就不会与传入数据中的ns0冲突。

问题与xslt无关。我正在使用一个只有根元素的输入文件进行测试。

您能添加示例输入吗?另外,实际输出和预期输出也可能有帮助。两种尝试都应该有效。可能还有其他问题。@Dijkgraaf-我在问题中添加了示例输入(并去掉了C#),但是输入是不相关的,因为它应该被映射到数据库的XML列。我在XSLT中将名称空间更改为n99。在XSLT测试人员网站上运行良好。我将在BizTalk中更多地使用它。我将检查ns0是否是BizTalk中的问题。不管怎样,看起来BizTalk中的“测试映射”中有一个输入文件没有任何子元素。