0
큰 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'을 업데이트 할 데이터가 포함 된 'file2.xml'을 가지고있다. 다음과 같이 구성되어있다 : '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>
내가 File2.xml의 값이 될 File1.xml에서 MODOUT를 업데이트합니다. 예를 들어, 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