我在查找元素的重复值并删除节点时遇到问题。
XML:
<library> <books> <name>Learn XSLT</name> <id>1</id> </books> <books> <name>Learn Java</name> <id>3</id> </books> <books> <name>Learn XSLT</name> <id>2</id> </books> </library>
我希望将重复的条目 <name>Learn XSLT</name> 和 <id>2</id> 存储在变量中,并从XML中删除books节点。我被困在如何找到那些重复的东西上。
<name>Learn XSLT</name>
<id>2</id>
预期的输出变量包含
<books> <name>Learn XSLT</name> <id>2</id> </books>
输出XML
<library> <books> <name>Learn XSLT</name> <id>1</id> </books> <books> <name>Learn Java</name> <id>3</id> </books> </library>
发布于 2018-09-13 09:39:55
如果您有一个包含要查找的XML结构的 xsl:param (或者从某个地方选择它,比如外部文档),那么可以使用 deep-equal() 来执行比较,从而删除它的所有子元素都与 xsl:param 元素的子元素相匹配的元素。
xsl:param
deep-equal()
使用带有专用模板的 identity transform 来匹配要删除的元素:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:output indent="yes"/> <xsl:param name="filter"> <books> <name>Learn XSLT</name> <id>2</id> </books> </xsl:param> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template>