给出一个数字列表,如下所示,
我需要删除所有具有这些确切值的记录作为YEAR元素:
1982
1988
输入:
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>19825</YEAR>
</CD>
<CD>
<TITLE>Hide your heart</TITLE>
<ARTIST>Bonnie Tyler</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>CBS Records</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1988</YEAR>
</CD>
<CD>
<TITLE>Greatest Hits</TITLE>
<ARTIST>Dolly Parton</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>RCA</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1982</YEAR>
</CD>
</CATALOG>
输出:
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>19825</YEAR>
</CD>
</CATALOG>
我怎样才能实现这一点,使用xslt 3?
具有确切的值我的意思是,如果错误地记录了一年的错误,那么这条记录将不会被删除,因为我会寻找“1982”
到目前为止,我一直在使用xmlstarlet
答案 0 :(得分:0)
在XSLT 2和XSLT 3中,您可以定义一个带有一系列年份值的参数,以与YEAR
元素的CD
元素进行比较,并确保它们不会被进一步处理为空匹配它们的模板。然后,身份转换将在XSLT 3中使用适当的xsl:mode
声明来处理其余部分:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="3.0">
<xsl:param name="years-to-delete" select="1982, 1988"/>
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="CD[YEAR = $years-to-delete]"/>
</xsl:stylesheet>