Как я могу скопировать данные из XML-файла в другой XML-файл, используя xsl в указанном месте - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь скопировать данные из файла1 в файл2 с помощью преобразования xsl.Я могу скопировать данные, но не в том месте, которое мне нужно.Пожалуйста, помогите мне скопировать данные в нужное место.Вот мой код:

file1.xml:

<Org>
    <Department name="Environmental" />
</Org>

file2.xml:

<Org>
    <Division>Engineering</Division>
    <Address>123 Elm Street</Address>
</Org>

result.xml:

<Org>
    <Division>Engineering</Division>
    <Address>123 Elm Street</Address>

</Org>
    <Department name="Environmental" />

Желаемый результат:

<Org>
    <Department name="Environmental">
        <Division>Engineering</Division>
        <Address>123 Elm Street</Address>
    </Department>
</Org>

Вот код из моего xsl-файла:

  <xsl:template match="//*[local-name()='Org'][*[local-name()='Department']]">
        <xsl:copy>
            <xsl:apply-templates select="@*" />
                <xsl:copy>
                    <xsl:copy-of select="document($lookup)/Agency/Division" />
                    <xsl:copy-of select="document($lookup)//Agency/Address" />
                </xsl:copy>
            <xsl:apply-templates select="node()" />
        </xsl:copy>     

Может кто-нибудь помочь мне решить проблему.

Спасибо за помощь.

1 Ответ

0 голосов
/ 27 февраля 2019

Измените свой шаблон XSLT на следующее.Переменная lookup должна содержать имя файла и путь file2.xml.

<!-- Copies the 'Org' node of file1.xml and applies the templates on the child elements -->
<xsl:template match="/*[local-name()='Org']">
  <xsl:copy>
    <xsl:apply-templates select="*" />
  </xsl:copy>
</xsl:template>

<!-- Copies the 'Department' node of file1.xml and then includes the values from file2.xml (in $lookup variable) -->
<xsl:template match="*[local-name()='Department' and parent::*[local-name()='Org']]">
  <xsl:copy>
    <xsl:copy-of select="@*" />              <!-- Copy the @name attribute (and possible others) -->
    <xsl:copy-of select="document($lookup)/Org/Division" />
    <xsl:copy-of select="document($lookup)/Org/Address" />
    <xsl:apply-templates select="node()" />  
  </xsl:copy>     
</xsl:template>

Вывод:

<?xml version="1.0"?>
<Org>
    <Department name="Environmental">
        <Division>Engineering</Division>
        <Address>123 Elm Street</Address>
    </Department>
</Org>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...