我有一个大型XML文件,我需要在其中设置某些值为' 2'其中父节点的ID号与另一个XML文件中的ID号相匹配。
我的大型XML文件' file1.xml'采用以下格式:
<institution>
<ukprn>1234</ukprn>
<course>
<courseID>1</courseID>
<courseaim>X99</courseaim>
</course>
<student>
<birthdate>30/10/1985</birthdate>
<instance>
<OWNINST>123456|5</OWNINST>
<FC>1</FC>
<elq>4</elq>
</instance>
</student>
<student>
<birthdate>01/02/1999</birthdate>
<instance>
<OWNINST>654321|1</OWNINST>
<FC>2</FC>
<elq>2</elq>
</instance>
<instance>
<OWNINST>654321|2</OWNINST>
<FC>6</FC>
<elq>1</elq>
</instance>
</student>
</institution>
有多个学生,每个学生可以有多个实例。
我有另一个xml文件&#39; File2.xml&#39;结构如下:
<studentstoadd>
<OWNINST>555466|2</OWNINST>
<OWNINST>654321|1</OWNINST>
</studentstoadd>
对于File2.xml中的每个学生,我想更改他们的&#39; FC&#39; File1.xml中的节点到&#39; 2&#39;无论以前是什么。不应更改未列在File2.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="OWNINST">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<xsl:copy-of select="document('File2.xml')//Instance[OWNINST=current()/../OWNINST]"/>
</xsl:copy>
</xsl:template>
答案 0 :(得分:1)
我想你只想要
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="student/instance[OWNINST = document('File2.xml')/studentstoadd/OWNINST]/FC">
<FC>2</FC>
</xsl:template>