我有像
这样的xml<Books>
<Book Name="ABC">
<Line No="43"/>
</Book>
<Book Name="XYZ">
<Line No="44"/>
</Book>
</Books>
我必须删除名称是&#34; ABC&#34;只有当姓名是&#34; XYZ&#34;也存在(或名称是&#34; ABC&#34;不是节点集中唯一的元素)
我准备的xslt就像:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:if test="count(Books/Book) > '1'">
<xsl:strip-space elements="*" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="Book[@Name='ABC']" />
</xsl:if>
</xsl:stylesheet>
这似乎不起作用。我在这里做错了什么
答案 0 :(得分:1)
您使用身份模板在右侧,但您需要将条件置于覆盖空模板的匹配模式中,而不是尝试使用if
(顶部不允许)无论如何,仅在模板内部。)
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="Book[@Name='ABC'][count(../Book) > 1]" />
</xsl:stylesheet>
match
模式将匹配“ABC”图书,但仅时至少有一个其他Book
兄弟图书。如果ABC是该模式不匹配的唯一Book
,则匹配器将回退到身份模板。