You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过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

火山引擎 最新活动