Копия для копирования корня и всех дочерних элементов в столбец базы данных xml

В BizTalk я пробую XSLT с приведенным ниже шаблоном. У меня есть вызов хранимой процедуры SQL, и есть несколько полей до и после столбца XML, но столбец XML должен содержать весь XML из исходного документа.

Я пробовал два способа, показанных ниже. Первый приводит к тому, что корневой узел копируется в нужное место, но ни один из его дочерних элементов. Я читал ранее сегодня, что копирование глубоко -copy (тогда как copy является поверхностной копией), поэтому не уверен, почему он не копирует дочерние элементы рекурсивно.

Попробуйте 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>

Попробуйте 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" >
    <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>

Кто-то в комментарии попросил ввести образец. Ввод не должен иметь значения, так как это прямая копия, но вот фиктивный пример:

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

Я удалил C# и попробовал вне BizTalk на таком сайте: https://www.online-toolz.com/tools/xslt-transformation.php# и все работало нормально. Но это не создало общую ссылку с моими данными/xsl.

Я также изменил пространство имен в xslt на ns99, чтобы оно не конфликтовало с ns0 во входящих данных.


person NealWalters    schedule 29.04.2021    source источник
comment
Не могли бы вы добавить образец ввода? Также могут быть полезны фактические и ожидаемые результаты.   -  person Dijkgraaf    schedule 30.04.2021
comment
Обе попытки должны сработать. Вероятно, что-то еще не так.   -  person Siebe Jongebloed    schedule 30.04.2021
comment
@Dijkgraaf - я добавил образец ввода к вопросу (и удалил C #), но ввод не имеет значения, так как все должно быть сопоставлено со столбцом XML для базы данных. Я изменил пространство имен на n99 в XSLT. Отлично работает на сайте XSLT-тестера. Я поиграюсь с ним в BizTalk. Я проверю, не является ли ns0 проблемой в BizTalk.   -  person NealWalters    schedule 03.05.2021
comment
Неважно, похоже, у меня на тестовой карте в BizTalk был входной файл, в котором не было дочерних элементов.   -  person NealWalters    schedule 03.05.2021


Ответы (1)


Проблема не имела ничего общего с XSLT. Я тестировал входной файл, в котором был только корневой элемент.

person NealWalters    schedule 03.05.2021