我是一个非常新的XSLT,在尝试删除包含多个节点中特定属性的节点时遇到了困难。我真的不知道术语(这使得在互联网上找到合适的答案真的很难),所以下面的代码可能会解释我在寻找比我更好的答案。
原件:
<xml version="1.0" encoding="utf-8">
<pages>
<page id="main" default="true">
<tabs>
<tab id="login" default="true"/>
<tab id="picture" default="true"/>
<tab id="password"/>
</tabs>
<page id="secondary" default="true">
<tabs>
<tab id="pin" default="true"/>
<tab id="picture" default="true"/>
</tabs>
</page>
<page id="logout" default="true">
<tabs>
<tab id="goodbye"/>
<tab id="login" default="true"/>
</tabs>
</page>
</pages>目标:我想通过和删除所有的图片元素。
<xml version="1.0" encoding="utf-8">
<pages>
<page id="main" default="true">
<tabs>
<tab id="login" default="true"/>
<tab id="password"/>
</tabs>
<page id="secondary" default="true">
<tabs>
<tab id="pin" default="true"/>
</tabs>
</page>
<page id="logout" default="true">
<tabs>
<tab id="goodbye"/>
<tab id="login" default="true"/>
</tabs>
</page>
</pages>我有一个xslt,但是它不能做我想做的事情,所以我把它放在我认为可以做到这一点的xslt下面。我的想法是,我需要进入每一页,所以不要提供一个特定的名称,然后,一旦我们进入标签寻找一个图片id,如果它在那里.不要复制it...otherwise复制一切像往常一样。
<xsl:template match="p:pages/p:page/p:tabs/p:tab>
<xsl:copy>
<xsl:if test=not("picture")>
<xsl:apply-templates select="@* | node()"/>
</xsl:if>
</xsl:copy>
</xsl:template>另外,如果有人对学习基础知识(或者至少是XSLT术语)有很好的建议,我们将不胜感激。谢谢!
发布于 2016-03-13 15:53:57
下面的样式表将执行以下操作
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="tab[@id='picture']"/>
</xsl:stylesheet>它有两个模板(一个是泛型的,只是递归地复制输入文档)和一个特定于tab元素的模板,其图片id不产生任何输出,因此有效地删除了这些元素。
https://stackoverflow.com/questions/35971861
复制相似问题