Привет, Тим, большое спасибо за то, что взглянул на это - главное решение не сработало, но переписанный, упрощенный шаблон сработал отлично. Спасатель, спасибо!
я большой 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>
Большое спасибо за просмотр этого. Мартин