Python循环匹配XML指定节点后获取其后节点的enabled属性
修改代码获取匹配节点的下一个LinearLayout节点的enabled属性
问题分析
你的原代码能找到指定text的节点,但错误返回了该节点自身的enabled属性,而你需要的是该节点之后的android.widget.LinearLayout节点的enabled值;同时原代码存在属性值类型判断错误——XML属性值是字符串,不能直接和布尔值True比较。
修改后的代码
from xml.dom import minidom def checktap(text): dom = minidom.parse("file.xml") nodes = dom.getElementsByTagName("node") for idx, node in enumerate(nodes): if node.getAttribute("text") == text: # 检查是否存在下一个节点 if idx + 1 < len(nodes): target_node = nodes[idx + 1] # 验证目标节点是否为android.widget.LinearLayout if target_node.getAttribute("class") == "android.widget.LinearLayout": enabled_val = target_node.getAttribute("enabled") # XML属性值为字符串,需比较小写的"true"/"false" return "Yes" if enabled_val.lower() == "true" else "No" # 未找到符合要求的下一个节点时返回提示 return "Target next node not found" # 未找到匹配text的节点时返回提示 return "Text matching node not found" value = checktap("EU 39") print(value)
关键修改点
- 获取下一个节点:通过遍历节点列表的索引
idx,直接取nodes[idx+1]获取当前匹配节点的下一个节点(getElementsByTagName返回的节点列表按XML中的顺序排列)。 - 节点类型验证:增加对目标节点
class属性的判断,确保获取的是android.widget.LinearLayout类型的节点。 - 属性值判断修正:XML中
enabled属性的值是字符串类型(如"true"或"false"),改为比较小写后的字符串,避免大小写问题。 - 边界情况处理:补充了匹配节点是最后一个节点、未找到目标类型节点、未找到匹配text节点的提示返回逻辑。
内容的提问来源于stack exchange,提问作者user12503028
相关产品推荐
相关产品推荐

