我有类似以下的XML
<ARTICLE type="newspaper" segment="entertainment">
<Price type="tax">$2</Price>
</ARTICLE>
<ARTICLE type="newspaper" segment="political">
<Price type="tax">$1</Price>
</ARTICLE>
现在我要做的是只在前面的top元素是ARTICLE并且segment =“entertainment”
时才删除Price(块)我尝试了以下方法,但它删除了两个块
<xsl:template match="Price[@type='tax'] ">
<xsl:if test="preceding::ARTICLE[1]/attribute(segment)='entertainment'">
<xsl:apply-templates/>
</xsl:if>
</xsl:template>
需要帮助。我必须删除价格区块,只有当区段是“娱乐”时才会立即进入上层文章。
答案 0 :(得分:0)
很难说出为什么你的模板在没有更多上下文的情况下工作(如格式良好的示例XML)。
这应该可行:
<xsl:template match="Price[@type='tax' and parent::ARTICLE[@segment='entertainment']]"/>
如果您仍想要Price
的文字,请添加xsl:apply-templates
:
<xsl:template match="Price[@type='tax' and parent::ARTICLE[@segment='entertainment']]">
<xsl:apply-templates/>
</xsl:template>
答案 1 :(得分:0)
你可以试试这个:
<xsl:template match="Price[@type='tax'] ">
<xsl:if test="preceding-sibling::ARTICLE[1]/attribute(segment)='entertainment'">
<xsl:apply-templates/>
</xsl:if>
</xsl:template>
希望有所帮助......
答案 2 :(得分:0)
只需使用模板:
<xsl:template match="ARTICLE[@segment='entertainment']/Price" />
这与您正在寻找的price
元素完全匹配,并且不会输出任何内容。