gpt4 book ai didi

python - 元素树语法错误 : expected path separator ([)

转载 作者:行者123 更新时间:2023-11-28 19:25:01 25 4
gpt4 key购买 nike

过去几天我进行了广泛的搜索,但似乎找不到我要找的东西。我使用 Python 2.7.3 和 ElementTree 编写了一个脚本来解析 XML 文件并编辑深藏在 XML 文件中的属性。该脚本工作正常。上周晚些时候,我与一位客户开会,他告诉我目标平台将是 CentOS。我想,没问题。为了在预期的平台上进行测试,我创建了一个 CentOS VMWare 客户端,令我惊讶的是我的脚本崩溃了,给我错误消息,“SyntaxError: expected path separator ([)”通过研究此错误消息的性质,我了解到 CentOS 6.4 支持 Python 2.6.6,其中包含不支持搜索属性 [@attribute] 语法的旧版本 ElementTree。
这个客户不会在平台上升级 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.7.3 代码片段,但在 Python 2.6.6 下会出错:

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”语句 block 的第一行,从而允许我编辑 Fusion 元素的“arguments”属性?还是我被降级为实现 libxml2,这将是一个真正的痛苦?...

谢谢。

最佳答案

这可能会回避问题,但您可以尝试从 Python 2.7 复制和粘贴 ElementTree 版本,重命名它以避免与标准库冲突,然后导入和使用它。

但是,由于 ElementTree 不打算用作独立文件,您需要做的是导航到 C:\Python27\Lib\xml 并复制整个 etree 文件夹并通过在脚本中执行 import etree.ElementTree 导入 ElementTree。

为避免意外导入或使用 Python 2.6 版本的 ElementTree,您可能应该重命名 etree 文件夹及其内容,删除 .pyc 文件,然后修复文件中的导入以引用 Python 2.7 版本。

关于python - 元素树语法错误 : expected path separator ([),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15753714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com