请注意,我正在使用这样导入的 lxml from lxml import etree
:.
我正在尝试使一些工作代码更加灵活。我的脚本采用包含按名称顺序排列的所有项目的输入 .xml 文件,引用包含项目 ID 号和项目名称的字典以根据该 .xml 文件生成项目 ID 列表,然后轮询 Web 服务器这些项目 ID 的价格数据,然后用于输出总成本。我的问题不是关于这些步骤中的任何一个。
相反,我的问题是关于如何处理解析包含多个订单的 .xml 文件。
到目前为止,我的示例 .xml 文件可能如下所示:
<?xml version="1.0" ?>
<cars>
<order="This is a test order">
<description value=""/>
<carType value="Model1"/>
<upgrade slot="interior 0" type="Leather Seats"/>
<upgrade slot="interior 1" type="6-Disc CD Player"/>
</order>
</cars>
我可以将其解析为一个列表,其中包括基本项目 carType(这是汽车的型号)和各种升级,如下所示:
for element in root.iterchildren('carType'):
modlist.append ("%s" % (element.get('value')))
for element in root.iter('upgrade'):
modlist.append ("%s" % str.upper((element.get('type'))))
它会给我一个名为的列表modlist
,['Model1', 'Leather Seats', '6-Disc CD Player']
我可以通过我的其他函数来获取这些物品的 ID 号,然后从那里获取价格信息并将其汇总,以找出这款带有真皮座椅升级的 Model1 汽车的价格和升级 6 碟 CD 播放器需要花费。
这是我遇到困难的地方。如何在一个 .xml 文件中拥有多辆汽车?一个示例可能如下所示:
<?xml version="1.0" ?>
<cars>
<order="This is a test order">
<description value=""/>
<carType value="Model1"/>
<upgrade slot="interior 0" type="Leather Seats"/>
<upgrade slot="interior 1" type="6-Disc CD Player"/>
</order>
<order="This is a 2nd order">
<description value=""/>
<carType value="Model3"/>
<upgrade slot="interior 0" type="Vinyl Seats"/>
<upgrade slot="wheels 0" type="Chrome Wheels"/>
<upgrade slot="wheels 1" type="8 Ply Tires"/>
</order>
<order="This is a 3rd order">
<description value=""/>
<carType value="Model7"/>
<upgrade slot="engine 0" type="V8"/>
<upgrade slot="interior 0" type="Leather Seats"/>
<upgrade slot="interior 1" type="Sunroof"/>
</order>
</cars>
我想一次在一个订单上运行我的函数,这样这个例子就会输出 3 个数字——这辆 Model1 车及其升级的总价、Model3 车的升级总价和总价Model7 汽车的升级版。
如何告诉我的函数一次只运行一个订单?我正在考虑一些事情,iterchild()
但我什么也做不了。