Я довольно новичок в 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» в реальном масштабе намного больше, поэтому обычное ручное копирование невозможно, если в выходном файле около ста узлов.