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

使用JS解析XML:区分父元素不同的同名子元素

区分父元素不同的同名XML元素

针对你给出的XML结构——<Nm>元素分别隶属于<Dbtr>和<Cdtr>父节点,要区分这两个同名字段,核心思路是通过父节点的层级关系来限定查找范围,下面结合常见的XML解析方式给出具体实现:

1. DOM解析(以JavaScript为例)

DOM会把XML解析成树形结构,你可以先定位到目标父节点,再从父节点下提取<Nm>的内容:

// 假设已将XML加载到xmlDoc对象中
// 获取债务人名称
const debtorName = xmlDoc.getElementsByTagName("Dbtr")[0].getElementsByTagName("Nm")[0].textContent;
// 获取债权人名称
const creditorName = xmlDoc.getElementsByTagName("Cdtr")[0].getElementsByTagName("Nm")[0].textContent;

console.log("债务人:" + debtorName); // 输出 Debtor
console.log("债权人:" + creditorName); // 输出 Creditor

这种方式先锁定<Dbtr>或<Cdtr>,再在其内部找<Nm>,完全不会混淆两个同名元素。

2. 用XPath精准定位

XPath可以直接通过层级路径表达式指定目标元素,写法更简洁:

// 假设已加载XML到xmlDoc对象
// 定义XPath路径
const debtorPath = "/Dbtr/Nm";
const creditorPath = "/Cdtr/Nm";

// 提取债务人名称
const debtorNode = xmlDoc.evaluate(debtorPath, xmlDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
const debtorName = debtorNode.singleNodeValue.textContent;

// 提取债权人名称
const creditorNode = xmlDoc.evaluate(creditorPath, xmlDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
const creditorName = creditorNode.singleNodeValue.textContent;

XPath表达式/Dbtr/Nm直接指向根节点下<Dbtr>的子节点<Nm>,精准区分同名字段。

3. Python解析示例(xml.dom.minidom)

如果用Python处理,逻辑和上面一致:

from xml.dom.minidom import parseString

xml_str = """
<root>
    <Dbtr>
        <Nm>Debtor</Nm>
    </Dbtr>
    <Cdtr>
        <Nm>Creditor</Nm>
    </Cdtr>
</root>
"""
dom = parseString(xml_str)

# 获取债务人名称
debtor_name = dom.getElementsByTagName("Dbtr")[0].getElementsByTagName("Nm")[0].firstChild.data
# 获取债权人名称
creditor_name = dom.getElementsByTagName("Cdtr")[0].getElementsByTagName("Nm")[0].firstChild.data

print(f"债务人:{debtor_name}")
print(f"债权人:{creditor_name}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 20:46:13