Cambie los valores en XML en función de los referenciados en otro archivo XML en función de criterios de coincidencia múltiple

Tengo un archivo XML grande y necesito cambiar ciertos valores a los de otro documento XML en función de múltiples criterios coincidentes.

Mi archivo XML grande 'file1.xml' tiene el siguiente formato:

<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>

Tengo un segundo archivo 'file2.xml' que contiene los datos para actualizar 'file1.xml'. Está estructurado así:

<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>

Para cada estudiante en 'File2.xml' quiero actualizar el MODOUT en File1.xml para convertirlo en el valor en File2.xml. Por ejemplo, en File1.xml: OWNINST = 1558310 | 1, MODID = 08 | 29400 tiene MODOUT = 4 pero File2.xml especifica que MODOUT = 6, por lo que File1.xml debe actualizarse a MODOUT = 6 para esa combinación particular de OWNINST / MODOUT . El archivo de salida debe ser una copia exacta de file1.xml pero con los cambios especificados en File2.xml.

Por favor, ¿podría ayudarme con esto? Parece que no puedo hacerlo funcionar.

Así de lejos llegué:

<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>

Entonces el archivo de salida debería ser:

<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>

Muchas gracias por mirar esto. Martín

Respuestas a la pregunta(1)

Su respuesta a la pregunta