如何使用样式表从另一个XML文档复制特定节点?

时间:2015-10-05 12:33:16

标签: xml xslt

我有以下代码:

<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]/STULOAD">
        <xsl:copy>
            <xsl:copy-of select=""/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

我需要从file2.xml中为每个OWNINST选择STULOAD,其格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<studentstoamend>
    <STUDENT><OWNINST>123456|2</OWNINST><STULOAD>0</STULOAD></STUDENT>
    <STUDENT><OWNINST>654321|1</OWNINST><STULOAD>100</STULOAD></STUDENT>
</studentstoamend>

并在我的文件(file1.xml)中覆盖该OWNINST的STULOAD。 File1具有比file2更多的OWNINST,并且不应更新file2中未引用的那些。

<Institution>
   <Student>
       <Instance>
       <OWNINST>123456|2</OWNINST>
       <STULOAD>3</STULOAD>
       </Instance>
   </Student>
   <Student>
       <Instance>
       <OWNINST>111111|3</OWNINST>
       <STULOAD>18</STULOAD>
       </Instance>
   </Student>
 </Institution>

我不能让我的副本声明起作用 - 如果这是正确的方法。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:1)

我认为你只想复制其他文件,例如

<xsl:template match="Student/Instance[OWNINST = document('File2.xml')/studentstoamend/STUDENT/OWNINST]/STULOAD">
    <xsl:copy-of select="document('File2.xml')/studentstoamend/STUDENT[OWNINST = current()/../OWNINST]/STULOAD"/>
</xsl:template>