我在查找元素的重复值并删除节点时遇到问题。
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节点。我被困在如何找到那些重复的东西上。
预期的输出变量包含
<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
元素的子元素相匹配的元素。
使用带有专用模板的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>
<!--if all of the matched element's children are deep equal to the $filter element's children,
then remove it -->
<xsl:template match="*[deep-equal(*, $filter/*/*)]"/>
</xsl:stylesheet>
https://stackoverflow.com/questions/52304563
复制相似问题