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

如何编写XSLT将XML元素转换为属性格式?

解决XML中<cas:ADDRESS_ELEMENT>转属性格式的XSLT方案

嘿,这就给你搞定!下面的XSLT代码可以完美实现你要的需求——把每个<cas:ADDRESS_ELEMENT>元素的TYPE属性作为新的属性名,VALUE属性作为对应的值,合并到父元素<cas:ADDRESS_DETAILS>中,同时保留原元素的所有原有属性:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:cas="http://your-namespace-here.com"> <!-- 替换成XML中cas前缀对应的实际命名空间URI -->
    <!-- 匹配根节点,触发文档处理 -->
    <xsl:template match="/">
        <xsl:apply-templates select="cas:ADDRESS_DETAILS"/>
    </xsl:template>

    <!-- 核心处理逻辑:转换ADDRESS_DETAILS元素 -->
    <xsl:template match="cas:ADDRESS_DETAILS">
        <!-- 复制当前元素的标签结构 -->
        <xsl:copy>
            <!-- 保留原元素的所有已有属性 -->
            <xsl:copy-of select="@*"/>
            <!-- 遍历所有ADDRESS_ELEMENT子元素,转换为属性 -->
            <xsl:for-each select="cas:ADDRESS_ELEMENT">
                <!-- 动态生成属性:属性名取TYPE的值,属性值取VALUE的值 -->
                <xsl:attribute name="{@TYPE}">
                    <xsl:value-of select="@VALUE"/>
                </xsl:attribute>
            </xsl:for-each>
            <!-- 若需保留ADDRESS_DETAILS下的其他子元素,取消下面一行注释即可 -->
            <!-- <xsl:apply-templates select="*[not(self::cas:ADDRESS_ELEMENT)]"/> -->
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

关键注意事项

  • 命名空间配置:必须把代码里的http://your-namespace-here.com替换成原XML中cas前缀对应的真实命名空间URI(原XML头部应该有这个声明,只是你提供的片段没显示),否则XSLT无法正确匹配元素。
  • 重复TYPE处理:如果存在多个TYPE值相同的<cas:ADDRESS_ELEMENT>,后面的元素会覆盖前面的属性值(XSLT默认行为),如果需要合并重复值,可以额外添加拼接逻辑。
  • 其他子元素保留:如果原XML中<cas:ADDRESS_DETAILS>还有非ADDRESS_ELEMENT的子元素需要保留,取消代码末尾的注释行即可。

输入输出示例

输入片段

<?xml version="1.0" encoding="utf-8"?>
<cas:ADDRESS_DETAILS PRIMARY_ADDRESS_INDICATOR="1" ADDRESS_ID="-289495914026885120" ADDRESS_TYPE="45001" ADDRESS_ACTIVE_FROM_DATE="2006-12-23" PERSON_ID="14512823342202880">
    <cas:ADDRESS_ELEMENT VALUE="McMurchy Avenue" TYPE="ADD2" />
    <cas:ADDRESS_ELEMENT VALUE="ON" TYPE="PROV" />
    <cas:ADDRESS_ELEMENT VALUE="CA" TYPE="COUNTRY" />
    <cas:ADDRESS_ELEMENT VALUE="Brampton" TYPE="CITY" />
</cas:ADDRESS_DETAILS>

输出片段

<cas:ADDRESS_DETAILS PRIMARY_ADDRESS_INDICATOR="1" ADDRESS_ID="-289495914026885120" ADDRESS_TYPE="45001" ADDRESS_ACTIVE_FROM_DATE="2006-12-23" PERSON_ID="14512823342202880" ADD2="McMurchy Avenue" PROV="ON" COUNTRY="CA" CITY="Brampton"/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:47:55