在过去的几天里,我进行了广泛的搜索,似乎找不到我想要的东西。我使用 Python 2.7.3 和 ElementTree 编写了一个脚本来解析 XML 文件并编辑隐藏在 XML 文件中的属性。该脚本工作正常。上周晚些时候,我与一位客户开会,他告诉我目标平台将是 CentOS。我想,没问题。为了在预期的平台上进行测试,我创建了一个 CentOS VMWare 客户端,令我惊讶的是,我的脚本搞砸了,给了我错误消息“ SyntaxError: expected path separator ([) ” 在我研究这个错误的性质的过程中message 我了解到 CentOS 6.4 支持 Python 2.6.6,
这个客户不会在平台上升级 Python,也不会安装额外的库,所以 lxml 对我来说不是一个选项。我的问题是,如果没有 ElementTree 对 [@attribute] 设施的支持,我还能以某种方式访问隐藏的属性并对其进行编辑吗?
这是我正在处理的 XML 类型的示例:
`
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<my-gui>
<vehicles>
<car vendor="Ford"/>
</vehicles>
<options>
<line transmission='manual'/>
</options>
<title>Dealership</title>
<choice id='manual' title="Dealership">
<pkg-deal id='manual' auth='manager'>.</pkg-deal>
</choice>
<choice id='manual' title='Dealership'/>
<choice id='manual' DealerLocation='Dealer_Loc'/>
<choices-outline color='color_choice'>
<line choice='blue'/>
</choices-outline>
<choice id='cars' GroupID='convertables'>
<pkg-deal id='model.Taurus' version="SEL" arguments='LeatherInterior' enabled='XMRadio'>Taurus</pkg-deal>
<pkg-deal id='model.Mustang' version="GT" enabled='SIRIUSRadio'>Mustang</pkg-deal>
<pkg-deal id='model.Focus' version="SE" enabled='XMRadio'>Focus</pkg-deal>
<pkg-deal id='model.Fairlane'>Fairlane</pkg-deal>
<pkg-deal id='model.Fusion' version="SE" arguments='ClothInerior'>Fusion</pkg-deal>
<pkg-deal id='model.Fiesta' version="S Hatch" enabled="SIRIUSRadio">Fiesta</pkg-deal>
</choice>
</my-gui>
`
这是在 Python 2.6.6 下中断的成功 Python 2.7.3 代码片段:
if self.root.iterfind('pkg-deal'):
self.deal = self.root.find('.//pkg-deal[@id="model.fusion"]')
self.arg = str(self.deal.get('arguments'))
if self.arg.find('with Scotchguard=') > 0:
QtGui.QMessageBox.information(self, 'DealerAssist', 'The selected car is already updated. Nothing to do.')
self.leave()
self.deal.set('arguments', self.arg + ' with Scotchguard')
...
...
有没有办法可以修改这个“if”语句块的第一行,允许我编辑 Fusion 元素的“arguments”属性?还是我被降级为实现 libxml2,这有望成为一个真正的痛苦?...
谢谢。