Привет, Тим, большое спасибо за то, что взглянул на это - главное решение не сработало, но переписанный, упрощенный шаблон сработал отлично. Спасатель, спасибо!

я большой XML-файл, и мне нужно изменить некоторые значения на значения в другом XML-документе на основе нескольких критериев соответствия.

Мой большой файл XML 'file1.xml' имеет следующий формат:

<institution>
<ukprn>1234</ukprn>
<course>
    <courseID>1</courseID>
    <courseaim>X99</courseaim>
</course>
<student>
    <birthdate>30/10/1985</birthdate>
    <instance>
        <OWNINST>1558310|1</OWNINST>
        <FC>1</FC>
        <STULOAD>100</STULOAD>
        <elq>4</elq>
        <MODE>31</MODE>
        <StudentOnModule>
              <MODID>08|29400</MODID>
              <MODOUT>4</MODOUT>
        </StudentOnModule>
        <StudentOnModule>
              <MODID>08|29091</MODID>
              <MODOUT>4</MODOUT>
        </StudentOnModule>
    </instance>
</student>
<student>
    <birthdate>01/02/1999</birthdate>
    <instance>
        <OWNINST>654321|1</OWNINST>
        <FC>2</FC>
        <elq>2</elq>
        <StudentOnModule>
              <MODID>02|37522</MODID>
              <MODOUT>6</MODOUT>
        </StudentOnModule>
        <StudentOnModule>
              <MODID>02|48966</MODID>
              <MODOUT>1</MODOUT>
        </StudentOnModule>
    </instance>
    <instance>
        <OWNINST>654321|2</OWNINST>
        <FC>6</FC>
        <elq>1</elq>
        <StudentOnModule>
              <MODID>08|29400</MODID>
              <MODOUT>4</MODOUT>
        </StudentOnModule>
        <StudentOnModule>
              <MODID>08|29091</MODID>
              <MODOUT>4</MODOUT>
        </StudentOnModule>
    </instance>
</student>
</institution>

У меня есть второй файл 'file2.xml', который содержит данные для обновления 'file1.xml'. Это структурировано так:

<studentstoamend>
<student><OWNINST>1558310|1</OWNINST><MODID>08|29400</MODID><MODOUT>6</MODOUT></student>
<student><OWNINST>1558310|1</OWNINST><MODID>08|29091</MODID><MODOUT>6</MODOUT></student>
</studentstoamend>

Для каждого студента в File2.xml я хочу обновить MODOUT в File1.xml, чтобы он стал значением в File2.xml. Например, в File1.xml: OWNINST = 1558310 | 1, MODID = 08 | 29400 имеет MODOUT = 4, но File2.xml указывает, что MODOUT = 6, поэтому File1.xml следует обновить до MODOUT = 6 для этой конкретной комбинации OWNINST / MODOUT , Выходной файл должен быть точной копией file1.xml, но с изменениями, указанными в File2.xml.

Пожалуйста, не могли бы вы помочь с этим, потому что я не могу заставить его работать.

Вот как далеко я получил:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
    <xsl:strip-space elements="*"/>

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

    <xsl:template match="Student/Instance[OWNINST = document('file2.xml')/studentstoamend/STUDENT/OWNINST/MODID]/MODOUT">
        <xsl:copy-of select="document('file2.xml')/studentstoamend/STUDENT[OWNINST = current()/../OWNINST]/MODID[MODID = current()/MODID]/MODOUT"/>
    </xsl:template>

</xsl:stylesheet>

Таким образом, выходной файл должен быть:

<institution>
<ukprn>1234</ukprn>
<course>
    <courseID>1</courseID>
    <courseaim>X99</courseaim>
</course>
<student>
    <birthdate>30/10/1985</birthdate>
    <instance>
        <OWNINST>1558310|1</OWNINST>
        <FC>1</FC>
        <STULOAD>100</STULOAD>
        <elq>4</elq>
        <MODE>31</MODE>
        <StudentOnModule>
              <MODID>08|29400</MODID>
              <MODOUT>6</MODOUT>
        </StudentOnModule>
        <StudentOnModule>
              <MODID>08|29091</MODID>
              <MODOUT>6</MODOUT>
        </StudentOnModule>
    </instance>
</student>
<student>
    <birthdate>01/02/1999</birthdate>
    <instance>
        <OWNINST>654321|1</OWNINST>
        <FC>2</FC>
        <elq>2</elq>
        <StudentOnModule>
              <MODID>02|37522</MODID>
              <MODOUT>6</MODOUT>
        </StudentOnModule>
        <StudentOnModule>
              <MODID>02|48966</MODID>
              <MODOUT>1</MODOUT>
        </StudentOnModule>
    </instance>
    <instance>
        <OWNINST>654321|2</OWNINST>
        <FC>6</FC>
        <elq>1</elq>
        <StudentOnModule>
              <MODID>08|29400</MODID>
              <MODOUT>4</MODOUT>
        </StudentOnModule>
        <StudentOnModule>
              <MODID>08|29091</MODID>
              <MODOUT>4</MODOUT>
        </StudentOnModule>
    </instance>
</student>
</institution>

Большое спасибо за просмотр этого. Мартин

Ответы на вопрос(1)

Ваш ответ на вопрос