如何通过XSLT删除元素及隐藏HTML转XML时指定图片?
XSLT相关问题解答
问题1:如何通过XSLT删除元素?
在XSLT里删除元素其实很简单,核心思路就是匹配到你想删除的元素,但不输出任何内容。具体分两种常见场景:
删除所有指定类型的元素:比如要删掉所有
<foo>元素,只需要写一个空模板匹配它就行:<xsl:template match="foo"/>这个模板会拦截所有
<foo>元素,因为模板里没有任何输出逻辑,这些元素自然就不会出现在最终结果里。删除符合特定条件的元素:如果只想删除带某个属性、或属性值符合要求的元素,在
match里加上条件即可。比如要删除所有class为"unwanted"的<div>:<xsl:template match="div[@class='unwanted']"/>
额外补充:如果你的需求是删除元素本身,但保留它的子节点,可以在模板里加上<xsl:apply-templates/>,这样子节点会被正常处理,父元素则被“过滤”掉:
<xsl:template match="foo"> <xsl:apply-templates/> </xsl:template>
问题2:转换HTML到XML时阻止显示指定图片
针对你要屏蔽new-sat-grid.png的需求,我们只需要精准匹配到对应的<img>元素,用空模板拦截它就可以了。
根据你提供的HTML片段,这个img有data-graphic-ref="new-sat-grid.png"的属性(这个标识通常比路径更稳定),我们可以用它来写匹配规则:
<!-- 基础模板:默认复制所有节点和属性,保证其他内容正常转换 --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <!-- 拦截指定的img元素,不输出到结果里 --> <xsl:template match="img[@data-graphic-ref='new-sat-grid.png']"/>
如果你更倾向于用src路径匹配,模板可以改成:
<xsl:template match="img[@src='../../img/chapter02/new-sat-grid.png']"/>
这样转换后,这张特定的图片元素就不会出最终的XML结果里啦。
内容的提问来源于stack exchange,提问作者mjwolff1




