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

XSLT 2.0 替换包含指定字符、为空或不存在的元素值的方法

XML SubModel字段标准化转换方案

以下两种实现均完整覆盖你提出的转换规则:SubModel存在且内容非空、非-则保留原值,其余所有情况统一输出为NA。如果你的规则中需要额外将下划线_也判定为无效值,只需要在对应方案的判断条件中加入对应取值的匹配即可。

方案1:XSLT 1.0 实现(通用XML转换方案,兼容所有支持XSLT的工具/语言)

XSLT是XML结构化转换的原生标准方案,无需额外编码即可通过各类XSLT工具直接执行:

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

    <!-- 处理Vehicle节点下的SubModel字段 -->
    <xsl:template match="Vehicle">
        <xsl:copy>
            <!-- 复制Vehicle下除了SubModel之外的所有现有节点 -->
            <xsl:apply-templates select="*[not(local-name()='SubModel')]"/>
            <!-- 生成标准化的SubModel字段 -->
            <SubModel>
                <xsl:choose>
                    <!-- 符合有效值的情况:SubModel存在,且内容不是空、不是'-' -->
                    <xsl:when test="SubModel and normalize-space(SubModel) != '' and normalize-space(SubModel) != '-'">
                        <xsl:value-of select="normalize-space(SubModel)"/>
                    </xsl:when>
                    <!-- 其余情况统一输出NA -->
                    <xsl:otherwise>NA</xsl:otherwise>
                </xsl:choose>
            </SubModel>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

使用时仅需通过任意支持XSLT的工具(如xsltproc、Java内置XSLT引擎、Python lxml库)加载上述样式表和输入XML,即可直接输出符合要求的结果。

方案2:Python 原生实现(适合集成到Python业务流程)

基于Python标准库xml.etree.ElementTree实现,无需额外安装第三方依赖:

import xml.etree.ElementTree as ET

def standardize_submodel(xml_str):
    root = ET.fromstring(xml_str)
    # 遍历所有Vehicle节点
    for vehicle in root.findall(".//Vehicle"):
        submodel_elem = vehicle.find("SubModel")
        submodel_val = None
        if submodel_elem is not None:
            submodel_val = submodel_elem.text.strip() if submodel_elem.text else ""
        # 判断是否需要替换为NA
        if submodel_elem is None or submodel_val in ("", "-"):
            # 移除原有SubModel节点(如果存在)
            if submodel_elem is not None:
                vehicle.remove(submodel_elem)
            # 新增值为NA的SubModel节点,放在Model节点之后保持结构一致
            model_pos = list(vehicle).index(vehicle.find("Model"))
            new_submodel = ET.Element("SubModel")
            new_submodel.text = "NA"
            vehicle.insert(model_pos + 1, new_submodel)
        else:
            # 保留有效值,自动去掉首尾空格
            submodel_elem.text = submodel_val
    # 转换为字符串返回
    return ET.tostring(root, encoding="unicode", xml_declaration=False)

调用时传入输入XML字符串即可直接得到转换后的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 22:45:07