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

如何使用XSLT重排Rice标签并移除空标签?

使用XSLT调整元素顺序并移除空标签的解决方案

以下是实现需求的XSLT代码,核心思路是通过身份模板保留大部分XML结构,仅对<Details>下的元素做自定义排序和过滤:

<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>

    <!-- 自定义处理<Details>元素,调整Rice顺序并移除空标签 -->
    <xsl:template match="Details">
        <xsl:copy>
            <!-- 先复制所有非<Rice>的子元素 -->
            <xsl:apply-templates select="*[not(local-name()='Rice')]"/>
            
            <!-- 输出<Rice>123</Rice> -->
            <xsl:apply-templates select="Rice[text()='123']"/>
            
            <!-- 输出<Rice>long-grain</Rice> -->
            <xsl:apply-templates select="Rice[text()='long-grain']"/>
        </xsl:copy>
    </xsl:template>

    <!-- 匹配空的<Rice>标签(包括<Rice/>和<Rice></Rice>),不输出 -->
    <xsl:template match="Rice[not(node())]"/>
</xsl:stylesheet>

代码说明:

  1. 身份模板:确保XML中大部分结构(如<Company>、<FarmName>、其他非Rice元素)原封不动复制,只修改需要调整的部分。
  2. 模板:
    • 先复制所有不是<Rice>的子元素,保持原有顺序;
    • 单独选中并输出文本为123的<Rice>元素;
    • 接着选中并输出文本为long-grain的<Rice>元素;
  3. 空过滤:通过匹配没有子节点(包括空文本)的<Rice>元素,直接跳过输出,实现移除效果。

原始XML:

<Company>
    <FarmName addressID="123465789">
        <Name xml:lang="en">Main Farm</Name>
        <Details>
            <Milk>Jodie Forster</Milk>
            <Bajra>ESRKSC</Bajra>
            <Rice>long-grain</Rice>
            <Rice>123</Rice>
            <Rice/>
            <Jowar>852</Jowar>
            <Lobia>WW</Lobia>
            <Maize>5240</Maize>
            <Masoor isoCode="US">123</Masoor>
        </Details>
        <Email>test@test.net</Email>
        <Phone>
            <TelephoneNumber>
                <AreaOrCityCode/>
                <Number>123456789</Number>
            </TelephoneNumber>
        </Phone>
    </FarmName>
</Company>

转换后期望XML:

<Company>
    <FarmName addressID="123465789">
        <Name xml:lang="en">Main Farm</Name>
        <Details>
            <Milk>Jodie Forster</Milk>
            <Bajra>ESRKSC</Bajra>
            <Rice>123</Rice>
            <Rice>long-grain</Rice>
            <Jowar>852</Jowar>
            <Lobia>WW</Lobia>
            <Maize>5240</Maize>
            <Masoor isoCode="US">123</Masoor>
        </Details>
        <Email>test@test.net</Email>
        <Phone>
            <TelephoneNumber>
                <AreaOrCityCode/>
                <Number>123456789</Number>
            </TelephoneNumber>
        </Phone>
    </FarmName>
</Company>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:10:42