大きなXMLファイルがあり、複数の一致基準に基づいて特定の値を別のXML文書の値に変更する必要があります。複数の一致条件に基づいて別の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>
私はとの「file1.xml」を更新するためのデータを含む第2のファイル「file2.xml」を持っています。私はFile2.xmlの値になることをFile1.xmlでMODOUTを更新したい「File2.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>
:それは、このように構成されています。たとえば、File1.xml:OWNINST = 1558310 | 1、MODID = 08 | 29400はMODOUT = 4ですが、File2.xmlはMODOUT = 6を指定しているため、特定のOWNINST/MODOUTの組み合わせに対してFile1.xmlをMODOUT = 6に更新する必要があります。出力ファイルは、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>
本当にありがとうございました。 マーティン
こんにちはティムそれを見ていただきありがとうございます。トップソリューションは機能しませんでしたが、書き直された簡略化されたテンプレートは完全に機能しました。命を救う、ありがとう! – MartinB