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

如何使用XSLT 1.0从动态复杂XML结构生成URL查询字符串

用XSLT 1.0实现通用XML到URL查询字符串的转换

当然可以通过XSLT 1.0实现这种动态通用的XML转URL查询字符串需求,下面是具体的转换样式表,能适配任意根节点下的子元素结构,自动过滤空元素:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="UTF-8" indent="yes"/>

    <!-- 匹配XML根节点 -->
    <xsl:template match="/">
        <result>
            <query>
                <!-- 遍历根节点下所有非空的子元素 -->
                <xsl:for-each select="*/*[normalize-space(text()) != '']">
                    <!-- 第一个参数前加?,后续参数加&amp; -->
                    <xsl:if test="position() > 1">
                        <xsl:text>&amp;amp;</xsl:text>
                    </xsl:if>
                    <xsl:if test="position() = 1">
                        <xsl:text>?</xsl:text>
                    </xsl:if>
                    <!-- 拼接键值对:元素名=文本内容 -->
                    <xsl:value-of select="concat(local-name(), '=', normalize-space(text()))"/>
                </xsl:for-each>
            </query>
        </result>
    </xsl:template>

    <!-- 忽略空文本节点,避免干扰 -->
    <xsl:template match="text()[normalize-space() = '']"/>
</xsl:stylesheet>

关键逻辑说明

  • 动态适配结构:通过*/*匹配任意根节点下的所有子元素,无需提前指定元素名称,适配不同XML结构
  • 过滤空元素:用[normalize-space(text()) != '']筛选出有非空文本内容的元素,自动忽略空节点(如<age/>或<org_structure/>)
  • 参数拼接规则:
    • 第一个有效参数前添加?作为查询字符串起始符
    • 后续参数用转义后的&amp;分隔(符合XML输出规范)
    • 用normalize-space清理文本内容中的多余空格,保证参数值干净
  • 空文本处理:额外模板忽略空文本节点,避免生成无效的空格内容

验证示例

将示例1的XML输入该样式表,会输出:

<?xml version="1.0" encoding="UTF-8"?>
<result>
    <query>?first_name=foo&amp;amp;last_name=bar</query>
</result>

示例2的XML输入后,输出:

<?xml version="1.0" encoding="UTF-8"?>
<result>
    <query>?occupation=developer&amp;amp;team=TECH</query>
</result>

完全符合需求中的转换要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 04:35:04