<P>因为两个URL都是不同的结构,考虑有条件地检查是否存在{{CD1>}节点,然后将一个动态搜索路径传递到^ {CD2>}。下面使用内置的<code>urllib</code>模式从URL解析XML:</p>
<pre><code>from urllib.request import urlopen
import xml.etree.ElementTree as ET
def vatbook_parse(url):
with urlopen(url) as f:
tree = ET.parse(f)
root = tree.getroot()
# CONDITIONALLY SET SEARCH PATH
path = './/atcs/booking' if tree.find('atc') is None else './/atc'
for atcs in root.iterfind(path):
callsign = atcs.find('callsign')
name = atcs.find('name')
time_start = atcs.find('time_start')
time_end = atcs.find('time_end')
if callsign is not None:
print(f"{name.text} booked {callsign.text} from {time_start.text} to {time_end.text}")
</code></pre>
<p>第一个URL</p>
<pre><code>vatbook_parse('http://vatbook.euroutepro.com/xml.php?fir=LJLA')
# Mirza Ibrahimovic booked LJLJ_APP from 2020-05-19 18:00:00 to 2020-05-19 21:00:00
# Mirza Ibrahimovic booked LJLJ_TWR from 2020-05-19 18:00:00 to 2020-05-19 21:00:00
</code></pre>
<p>第二个URL</p>
<pre><code>vatbook_parse('http://vatbook.euroutepro.com/xml2.php?fir=LJLA')
# Mirza Ibrahimovic booked LJLJ_APP from 2020-05-19 18:00:00 to 2020-05-19 21:00:00
# Mirza Ibrahimovic booked LJLJ_TWR from 2020-05-19 18:00:00 to 2020-05-19 21:00:00
</code></pre>