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

如何用Python依据XML1格式校验XML2的Equal运算符并匹配标签

解决方案:匹配Equal运算符格式并提取符合条件的Label

核心思路

先明确XML1定义的Equal节点格式规则:Equal节点下必须恰好包含2个子节点,且这两个子节点的标签名完全一致(要么都是Data,要么都是Integer)。之后遍历XML2中的所有Equal节点,逐一验证格式,最后提取符合规则的关联Label。

完整代码实现

from lxml import etree

# 1. 定义Equal节点的格式校验规则
def is_valid_equal(equal_node):
    # 获取Equal下的所有直接子节点
    children = list(equal_node)
    # 条件1:恰好有2个子节点
    if len(children) != 2:
        return False
    # 条件2:两个子节点的标签名相同,且是Data或Integer
    child_tag1 = children[0].tag
    child_tag2 = children[1].tag
    return child_tag1 == child_tag2 and child_tag1 in ['Data', 'Integer']

# 2. 解析XML2文档(替换为你的XML文件路径或字符串)
xml2_content = """
<!-- 这里替换为你的XML2内容 -->
<Root>
    <Condition>
        <Label>Hotel</Label>
        <Equal>
            <Data>xxx</Data>
            <Data>yyy</Data>
        </Equal>
    </Condition>
    <Condition>
        <Label>Food</Label>
        <Equal>
            <Integer>123</Integer>
            <Integer>456</Integer>
        </Equal>
    </Condition>
    <Condition>
        <Label>Invalid</Label>
        <Equal>
            <Data>aaa</Data>
            <Integer>789</Integer>
        </Equal>
    </Condition>
</Root>
"""
tree = etree.fromstring(xml2_content)

# 3. 遍历所有Condition节点,筛选符合规则的Label
valid_labels = []
for condition in tree.xpath('//Condition'):
    equal_node = condition.find('Equal')
    if equal_node is not None and is_valid_equal(equal_node):
        label_node = condition.find('Label')
        if label_node is not None and label_node.text:
            valid_labels.append(label_node.text.strip())

# 4. 输出结果
print("符合条件的Label:", valid_labels)

代码说明

  • is_valid_equal函数:专门校验单个Equal节点是否符合XML1的格式要求,先检查子节点数量,再检查子节点类型是否统一为Data或Integer。
  • 遍历逻辑:通过XPath定位所有<Condition>节点,每个节点下找对应的Equal和Label,校验通过后收集Label文本。
  • 适配性:如果你的XML结构和示例不同(比如Equal节点的层级不同),只需要调整XPath路径即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:50:28