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

咨询:使用XSLT通过XPath提取HTML元素innerHTML的方法

问题:用XSLT提取元素完整innerHTML而非仅文本内容

我想要基于一份现有HTML文档生成新的HTML文档,选择使用XSLT作为模板语言。但当我使用<xsl:value-of>标签通过XPath提取源文档元素时,仅能获取文本内容,而我希望获取元素的完整innerHTML。

以下是我正在使用的XSL文件:

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="2.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xhtml="http://www.w3.org/1999/xhtml"
  xpath-default-namespace="http://www.w3.org/1999/xhtml"
>
  <xsl:template match="/">
    <xsl:value-of select="//article" />
  </xsl:template>
</xsl:stylesheet>

请问我应该用哪个标签替代<xsl:value-of>?是否还存在其他遗漏的设置?


解决方案

用<xsl:copy-of>替代<xsl:value-of>即可,前者会复制选中节点的完整节点树(包括子元素、属性和文本内容),而后者仅提取节点的文本值。

修改后的XSL代码:

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="2.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xhtml="http://www.w3.org/1999/xhtml"
  xpath-default-namespace="http://www.w3.org/1999/xhtml"
>
  <xsl:template match="/">
    <!-- 只复制article的内部内容(innerHTML) -->
    <xsl:copy-of select="//article/node()" />
  </xsl:template>
</xsl:stylesheet>

补充说明:

  • 如果你需要连<article>元素本身一起复制,把select的值改成//article即可;如果只需要内部内容,用//article/node()选中所有子节点。
  • 你当前的命名空间配置没问题:xpath-default-namespace指定了XHTML默认命名空间,能正确匹配源文档里的<article>元素,不需要额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:58:28