如何用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
相关产品推荐
相关产品推荐

