Скопируйте определенный дочерний узел и все его родительские элементы из внешнего XML-документа с помощью document (), а затем измените значение внутри скопированного узла. - PullRequest
0 голосов
/ 23 октября 2019

Я довольно новичок в XSLT 1.0, и в настоящее время у меня возникают проблемы с изменением значения внутри узлов XMl, скопированных из внешнего документа XML.

Вот внешний файл XML "External.xml", которыйнеобходимо добавить, используя документ ("External.xml").

<externalxml>
    <additionalinfo>
           .
           .
    </additionalinfo>
    <maindoc id="1">
        <docinfo>
            <name></name>
            <date></date>
            <other></other>
        </docinfo>
        <subdoc id="1">
            <subdocinfo>
                <name></name>
                <date></date>
                <other></other>
            </subdocinfo>
        </subdoc>
                   .
                   .
                   .
        <subdoc id="99">
            <subdocinfo>
                <name></name>
                <date></date>
                <other></other>
            </subdocinfo>
        </subdoc>
    </maindoc>
             .
             .
             .
    <maindoc id="99">
        <docinfo>
            <name></name>
            <date></date>
            <other></other>
        </docinfo>
        <subdoc id="1">
            <subdocinfo>
                <name></name>
                <date></date>
                <other></other>
            </subdocinfo>
        </subdoc>
                   .
                   .
                   .
        <subdoc id="99">
            <subdocinfo>
                <name></name>
                <date></date>
                <other></other>
            </subdocinfo>
        </subdoc>
    </maindoc>
</externalxml>

Таким образом, в основном вышеупомянутый документ содержит узлы "maindoc" до 99 раз, которые могут содержать до 99 узлов "subdoc".

И это transform.xml, который я буду использовать для преобразования. Используя значения «maindocid» и «subdocid» внутри него, будут скопированы правильные «maindoc» и «subdoc» из «External.xml», а некоторые его значения будут обновлены с использованием значений в этом документе XML.

<?xml version="1.0" encoding="UTF-8"?>
<transformxml>
    <maindocid>5</maindocid>
    <subdocid>20</subdocid>
    <subdocname>new subdoc name</subdocname>
    <subdocdate>new sub doc date</subdocdate>
</transformxml>

используя значение из узла "docid" и "subdocid", все правильные родительские узлы, атрибуты и значение должны быть скопированы и обновлены значением из вышеуказанного XML.

вывод долженкак показано ниже

<?xml version="1.0" encoding="UTF-8"?>
<outputxml>
    <maindoc id="5">
        <docinfo>
            <id></id>
            <date></date>
            <other></other>
        </docinfo>
        <subdoc id="20">
            <subdocinfo>
                <name>new subdoc name</name>
                <date>new sub doc date</date>
                <other></other>
            </subdocinfo>
        </subdoc>
    </maindoc>
</outputxml>

Я уже пытался сделать обратное, вызвав значения из «transform.xml» с использованием «document ()» и преобразовав вместо этого «External.xml», и это работает, так как я могуманипулируйте узлами из «External.xml» с помощью атрибута «match».

Так что теперь, по какой-то причине, это должно быть сделано в XSLT версии 1.0. Кроме того, «External.xml» должен использоваться в качестве внешнего XML-документа.

Поскольку «External.xml» в реальном масштабе намного больше, поэтому обычное ручное копирование невозможно, если в выходном файле около ста узлов.

...