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

如何使用Python从XML文件中解析指定起止ToolID的事件路径

用Python解析XML并查找ToolID路径的实现方案

完全可以用Python实现这个需求,核心思路是先把XML中的连接关系转换成有向图的邻接表,再通过搜索算法(比如广度优先搜索BFS)找到从起始ToolID到终点ToolID的路径。

步骤1:解析XML构建邻接表

使用Python内置的xml.etree.ElementTree模块解析XML,遍历所有<Connection>节点,提取每个连接的源ToolID(Origin的ToolID)和目标ToolID(Destination的ToolID),构建一个字典存储节点间的指向关系。

步骤2:实现路径搜索算法

用BFS算法遍历图,记录每一步的路径,当找到终点ToolID时返回路径。BFS能保证找到最短路径,同时可以避免循环访问节点。

完整代码示例

import xml.etree.ElementTree as ET

def build_connection_graph(xml_content):
    # 解析XML内容
    root = ET.fromstring(xml_content)
    graph = {}
    
    # 遍历所有Connection节点
    for connection in root.findall('Connection'):
        origin = connection.find('Origin')
        dest = connection.find('Destination')
        
        if origin is not None and dest is not None:
            origin_id = origin.get('ToolID')
            dest_id = dest.get('ToolID')
            
            # 构建邻接表:源ID对应多个目标ID的列表
            if origin_id not in graph:
                graph[origin_id] = []
            graph[origin_id].append(dest_id)
    
    return graph

def find_path(graph, start_id, end_id):
    # BFS找路径,每个元素是当前路径列表
    queue = [[start_id]]
    visited = set()
    
    while queue:
        current_path = queue.pop(0)
        current_node = current_path[-1]
        
        if current_node == end_id:
            return current_path
        
        if current_node not in visited:
            visited.add(current_node)
            # 遍历当前节点的所有邻接节点
            for neighbor in graph.get(current_node, []):
                new_path = current_path.copy()
                new_path.append(neighbor)
                queue.append(new_path)
    
    # 没有找到路径的情况
    return None

# 测试示例XML内容
xml_sample = '''
<Root>
    <Connection>
      <Origin ToolID="1" Connection="Output" />
      <Destination ToolID="3" Connection="Input" />
    </Connection>
    <Connection>
      <Origin ToolID="2" Connection="Output" />
      <Destination ToolID="1" Connection="Input" />
    </Connection>
    <Connection>
      <Origin ToolID="3" Connection="Unique" />
      <Destination ToolID="5" Connection="Input" />
    </Connection>
    <Connection>
      <Origin ToolID="3" Connection="Duplicates" />
      <Destination ToolID="6" Connection="Input" />
    </Connection>
    <Connection>
      <Origin ToolID="3" Connection="Unique" />
      <Destination ToolID="48" Connection="Input" />
    </Connection>
</Root>
'''

# 构建图并查找路径
graph = build_connection_graph(xml_sample)
start = "2"
end = "48"
path = find_path(graph, start, end)

if path:
    print(f"找到路径: {' → '.join(path)}")
else:
    print("未找到从起始ToolID到终点ToolID的路径")

代码说明

  • build_connection_graph函数:将XML中的连接关系转换成邻接表结构,自然处理一个源ToolID对应多个目标ToolID的情况。
  • find_path函数:用BFS遍历图,记录每一步的路径,找到终点后立即返回(确保是最短路径);如果遍历完所有节点都没找到终点,返回None。
  • 测试部分:用你提供的XML示例,起始ID为"2",终点ID为"48",运行后会输出找到路径: 2 → 1 → 3 → 48。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:27:11