You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XSLT如何移除<previous>节点内容,获取节点纯文本值?

如何移除XML中指定节点的内容?

嘿,我懂你遇到的问题了——用<xsl:value-of>的时候,它会把目标节点下所有层级的文本内容都拼在一起,所以才会把<languaje>里的ESP和<previous>里的EU合并成ESPEU。要只保留ESP,有几个简单的解决办法:

方法一:直接选取节点的直接子文本

最直接的方式是用text()函数,它只会选取当前节点的直接子文本节点,不会包含子节点里的文本。修改你的代码:

<languaje>
  <xsl:value-of select="Book/languaje/text()"/>
</languaje>

这样就能精准拿到<languaje>里的ESP,完全忽略<previous>节点的内容。如果同一节点下有多个直接文本片段,text()会把它们都拼接起来;要是只想取第一个,加上索引text()[1]就行。

方法二:过滤掉节点后再处理

如果需要更通用的处理逻辑(比如要移除多个指定节点),可以先筛选掉<previous>节点,再保留剩下的内容:

<languaje>
  <xsl:copy-of select="Book/languaje/node()[not(self::previous)]"/>
</languaje>

这种方法会保留<languaje>里除了<previous>之外的所有节点(包括文本和其他合法子节点),适合结构更复杂的场景。

完整示例XSLT

给你一个完整的样式表,用来测试效果:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <Book>
      <Title><xsl:value-of select="Book/Title"/></Title>
      <languaje><xsl:value-of select="Book/languaje/text()"/></languaje>
      <nationality><xsl:value-of select="Book/nationality"/></nationality>
    </Book>
  </xsl:template>
</xsl:stylesheet>

用这个处理你的源XML,输出的<languaje>节点就只会是ESP啦。

内容的提问来源于stack exchange,提问作者Aitor Huerta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:56:27