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
相关产品推荐
相关产品推荐

