当节点集长度大于 1 时从节点集中删除节点
Remove nodes from nodeset when nodeset length is more than 1
我有一个 xml 喜欢
<Books>
<Book Name="ABC">
<Line No="43"/>
</Book>
<Book Name="XYZ">
<Line No="44"/>
</Book>
</Books>
仅当名称为 "XYZ" 的位置也存在时(或者名称为 "ABC" 的位置不是节点集中的唯一元素),我才必须删除名称为 "ABC" 的位置
我准备的 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>
这似乎不起作用。我在这里做错了什么。
您在标识模板的正确行上,但您需要将条件放在覆盖空模板的匹配模式中,而不是尝试使用 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
该模式将不匹配,匹配器将回退到标识模板。
我有一个 xml 喜欢
<Books>
<Book Name="ABC">
<Line No="43"/>
</Book>
<Book Name="XYZ">
<Line No="44"/>
</Book>
</Books>
仅当名称为 "XYZ" 的位置也存在时(或者名称为 "ABC" 的位置不是节点集中的唯一元素),我才必须删除名称为 "ABC" 的位置
我准备的 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>
这似乎不起作用。我在这里做错了什么。
您在标识模板的正确行上,但您需要将条件放在覆盖空模板的匹配模式中,而不是尝试使用 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
该模式将不匹配,匹配器将回退到标识模板。