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

XSLT需求:仅解除entry元素中首个p元素的嵌套

解决DITA entry元素的p标签处理需求

以下是实现需求的XSLT代码,核心思路是通过身份转换模板保留文档原有结构,仅对entry元素做针对性处理:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 身份转换模板:默认复制所有节点和属性,保证非目标元素结构不变 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 专门处理entry元素 -->
    <xsl:template match="entry">
        <xsl:copy>
            <!-- 根据entry内p元素的数量分支处理 -->
            <xsl:choose>
                <!-- 仅包含一个p元素:提取文本,丢弃p标签 -->
                <xsl:when test="count(p) = 1">
                    <xsl:value-of select="p/text()"/>
                </xsl:when>
                <!-- 包含多个p元素:提取第一个p的文本,保留后续所有p元素 -->
                <xsl:when test="count(p) > 1">
                    <xsl:value-of select="p[1]/text()"/>
                    <xsl:apply-templates select="p[position() > 1]"/>
                </xsl:when>
                <!-- 无p元素的情况:直接保留原有内容 -->
                <xsl:otherwise>
                    <xsl:apply-templates select="@*|node()"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

代码说明

  • 身份转换模板:确保DITA文档中除entry外的所有元素、属性、文本都原样保留,不会破坏原有文档结构。
  • entry元素处理逻辑:
    • 单p场景:只输出p标签内的文本内容,移除p标签;
    • 多p场景:保留第一个p的文本内容(移除其标签),后续的p元素完整保留;
    • 无p场景:entry内原有内容不做任何修改。

测试验证

用你提供的输入示例测试,会生成预期输出:
输入:

<entry><p>Description</p></entry>
<entry><p>Description2</p><p>Description3</p><p>Description4</p>

输出:

<entry>Description</entry>
<entry>Description2<p>Description3</p><p>Description4</p>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:10:23