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

如何为document-node类型变量中<p>元素文本添加分号?

问题:为XML中<p>元素文本末尾添加分号并生成document-node变量

需求

  • 输入:类型为document-node的变量cond_in,示例内容:
<entry attribute1="att1" attribute2="att2">
    <p>Value1</p>
    <p>Value2</p>
    <p>Value3</p>
</entry>
  • 输出:同类型的document-node变量cond_out,每个<p>元素的文本末尾添加; ,示例内容:
<entry attribute1="att1" attribute2="att2">
    <p>Value1; </p>
    <p>Value2; </p>
    <p>Value3; </p>
</entry>

尝试的代码

<xsl:variable name="cond_out">
    <xsl:apply-templates select="$cond_in" mode="addsymbol"/>
</xsl:variable>

<xsl:template match="entry" mode="addsymbol">
    <xsl:copy-of select="entry"/>
</xsl:template>

解决方案

可以通过XSLT的身份模板保留原XML结构,再专门匹配<p>的文本节点进行修改,代码如下:

<xsl:variable name="cond_out" as="document-node()">
    <xsl:document>
        <xsl:apply-templates select="$cond_in/node()" mode="addsymbol"/>
    </xsl:document>
</xsl:variable>

<!-- 身份模板:复制所有未自定义匹配的节点、属性,保证原结构完整 -->
<xsl:template match="@*|node()" mode="addsymbol">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()" mode="addsymbol"/>
    </xsl:copy>
</xsl:template>

<!-- 匹配<p>的文本节点,拼接分号 -->
<xsl:template match="p/text()" mode="addsymbol">
    <xsl:value-of select="concat(., '; ')"/>
</xsl:template>

代码说明

  1. 用as="document-node()"显式指定变量类型,结合<xsl:document>包裹处理结果,确保输出为标准的document-node类型
  2. 身份模板负责原样复制所有未修改的内容(比如<entry>的属性、整体节点结构),避免手动复制每个节点的繁琐操作
  3. 专门匹配p/text()的模板,将原文本与; 拼接后输出,精准修改<p>的文本内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:20:07