我有一个大型XML文件,我需要删除其中一个实例节点的OWNINST与另一个XML文件中的一个匹配的整个学生节点(以及该学生中的所有子节点)。
我的大型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>
<ybj>76</jbj>
<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>
有多个学生,每个学生可以有多个实例,并非所有学生都有所有节点。
我有另一个xml文件'File2.xml',其结构如下:
<studentstodelete>
<OWNINST>555466|2</OWNINST>
<OWNINST>654321|1</OWNINST>
</studentstodelete>
对于File2.xml中的每个学生,如果他们的OWNINST列在File2.xml中,我想删除它们在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')/studentstodelete/OWNINST]">
</xsl:template>
任何帮助都非常感激。
由于
答案 0 :(得分:0)
如果要删除Student
元素,则需要更改
<xsl:template match="Student/Instance[OWNINST = document('File2.xml')/studentstodelete/OWNINST]">
</xsl:template>
到
<xsl:template match="Student[Instance/OWNINST = document('File2.xml')/studentstodelete/OWNINST]"></xsl:template>