如何用XSLT移除含特定href值<a>标签的<li>标签?
解决方案
要移除包含href含"older"的<a>的整个<li>,你需要直接匹配对应的<li>节点,而非仅匹配<a>。同时可额外处理空的<ul>,完整XSLT如下:
<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> <!-- 移除包含href含"older"的<a>的<li> --> <xsl:template match="li[.//a[contains(@href, 'older')]]"/> <!-- 可选:移除空的<ul>(无任何<li>的列表) --> <xsl:template match="ul[not(li)]"/> </xsl:stylesheet>
代码说明
- 身份模板:保留未被特殊模板匹配的所有内容,确保其他HTML结构不受影响。
- 匹配
<li>的模板:li[.//a[contains(@href, 'older')]]定位所有后代中存在<a>且其href包含"older"的<li>,空模板意味着不输出该节点。 - 匹配空
<ul>的模板:ul[not(li)]匹配没有子<li>的列表,同样不输出,可根据需求选择保留或删除。
测试效果
用你提供的示例HTML输入,转换后会得到:
<ul> <li><a href="/some/old/path">One</a></li> <li><a href="/other/old/path">Two</a></li> </ul>
若所有<li>都被移除,对应的<ul>也会被删除(如果启用了空列表移除模板)。
内容的提问来源于stack exchange,提问作者HangarRash
相关产品推荐
相关产品推荐

