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

如何使用XSL修改XML并移除BNF元素

XSL转换实现:移除BNF元素并提取VMP节点

现有如下XML输入:

<BNF_DETAILS xsi:noNamespaceSchemaLocation="bnf_v1_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <!-- Generated by NHSBSA PPD -->
        <VMPS>
            <VMP>
                <VPID>40689311000001106</VPID>
                <BNF>08010100</BNF>
                <ATC>L01EL03</ATC>
                <DDD>320</DDD>
                <DDD_UOMCD>258684004</DDD_UOMCD>
            </VMP>
            <VMP>
              ...
            </VMP>
        </VMPS>
        
        <AMPS />
    </BNF_DETAILS>

需要转换为以下格式(移除所有<BNF>元素,直接输出每个<VMP>节点):

<VMP>
    <VPID>40689311000001106</VPID>
    <ATC>L01EL03</ATC>
    <DDD>320</DDD>
    <DDD_UOMCD>258684004</DDD_UOMCD>
</VMP>
<VMP>
    ...
</VMP>

解决方案XSLT代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 移除XML中的空白节点,避免输出多余空格 -->
    <xsl:strip-space elements="*"/>
    <!-- 设置XML输出格式,保留缩进 -->
    <xsl:output method="xml" indent="yes"/>

    <!-- 匹配根节点,直接定位到需要处理的VMP节点集合 -->
    <xsl:template match="/BNF_DETAILS">
        <xsl:apply-templates select="VMPS/VMP"/>
    </xsl:template>

    <!-- 处理每个VMP节点:复制自身,仅保留非BNF的子节点 -->
    <xsl:template match="VMP">
        <VMP>
            <xsl:apply-templates select="*[not(local-name()='BNF')]"/>
        </VMP>
    </xsl:template>

    <!-- 通用模板:复制所有非BNF的子节点 -->
    <xsl:template match="*[not(local-name()='BNF')]">
        <xsl:copy-of select="."/>
    </xsl:template>
</xsl:stylesheet>

代码说明

  1. <xsl:strip-space elements="*"/>:清理原XML中的空白节点,保证输出格式整洁
  2. <xsl:output method="xml" indent="yes"/>:指定输出为XML格式并自动添加缩进,和目标格式一致
  3. 根节点模板:直接跳过其他无关节点(如AMPS),只处理VMPS下的VMP节点
  4. VMP节点模板:复制<VMP>标签,同时过滤掉内部的<BNF>子元素
  5. 通用子节点模板:自动复制所有非BNF的子节点,无需逐个指定节点名称,扩展性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:35:23