我广泛关注过去几天,似乎无法找到我要找的。 我已经写了使用Python 2.7.3和ElementTree的解析XML文件并编辑XML文件中深埋属性的脚本。 该脚本工作正常。 我上周晚些时候开了一个会与谁告诉我的目标平台将是CentOS的客户。 我想,没问题。 为了测试我创建了一个CentOS的VMware客户端和出乎我的意料我的脚本crapped床上预期的平台上,给我的错误消息“ 语法错误:预期路径分隔符([])”在我研究这个错误的性质的过程消息我才知道的CentOS 6.4支持Python 2.6.6,其中包含ElementTree中的旧版本不具备用于搜索属性[@attribute]语法的支持。
这个客户不会在平台上升级的Python,也不会安装额外的库,所以LXML不是我的选择。 我的问题是,我可以以某种方式仍然可以访问埋属性和编辑它没有为[@attribute]设施ElementTree的支持?
这里是一种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')
...
...
有没有一种方法,我可以修改这个“如果”语句块,让我编辑的融合元素的“参数”属性的第一线? 还是我退居实施libxml2的,这将是一个真正的痛苦?...
谢谢。