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

如何使用XSLT将节点/元素作为属性添加到XML节点

解决XHTML转XML时将div.cmp-text内容转为属性值的问题

需求概述

需要将XHTML文档转换为指定格式的XML,核心要求是把XHTML中div.cmp-text节点的完整内容(包含嵌套标签)作为目标XML元素的属性值。

初始实现的问题

直接编写的XSLT 1.0代码无法实现该需求,因为XSLT 1.0中如果直接将节点集赋值给属性,只会提取节点集中的文本内容,而非完整的标记结构。

解决方案:使用xml-to-string模板序列化节点

通过导入一个xml-to-string模板,将div.cmp-text节点序列化为字符串形式,再将该字符串作为属性值赋值给目标XML元素。

xml-to-string模板代码

<xsl:template name="xml-to-string">
  <xsl:param name="node"/>
  <xsl:variable name="temp">
    <xsl:copy-of select="$node"/>
  </xsl:variable>
  <xsl:value-of select="document('')//xsl:variable[@name='temp']/*"/>
</xsl:template>

主XSLT代码示例

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <!-- 导入xml-to-string模板 -->
  <xsl:import href="xml-to-string.xsl"/>
  
  <xsl:template match="/">
    <target-element>
      <!-- 调用模板将div.cmp-text转为字符串,作为属性值 -->
      <xsl:attribute name="content">
        <xsl:call-template name="xml-to-string">
          <xsl:with-param name="node" select="//div[@class='cmp-text']"/>
        </xsl:call-template>
      </xsl:attribute>
    </target-element>
  </xsl:template>
</xsl:stylesheet>

预期输出

假设输入的XHTML包含:

<div class="cmp-text">
  <p>这是一段<strong>加粗</strong>的文本</p>
</div>

转换后的XML输出为:

<target-element content="&lt;p&gt;这是一段&lt;strong&gt;加粗&lt;/strong&gt;的文本&lt;/p&gt;"/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:55:20