【发布时间】:2023-03-03 11:06:02
【问题描述】:
输入:-
<manifest>
<default revision="jb_2.5.4" remote="quic"/>
<project name="platform/vendor/google/proprietary/widevine"
path="vendor/widevine"
revision="refs/heads/jb_2.6"
x-grease-customer="none"
x-quic-dist="none"
x-ship="none" />
<project path="vendor/widevine" name="platform/vendor/google/proprietary/bluetooth" x-ship="none" x-quic-dist="none" x-grease-customer="none"/>
</manifest>
如果存在修订标签,我正在尝试从上面的输入中获取修订值,如果存在 不存在使用默认标签中的修订值,我有以下代码并遇到以下错误.. 任何人都可以就这里的问题提供意见吗?
import shlex
import os
import sys
import json
import fileinput
import pwd
import itertools
import subprocess
from subprocess import Popen, PIPE, STDOUT
import xml.etree.ElementTree as ET
import re
def manifest_data (name):
pattern = re.compile('refs/heads/(.*)')
tree = ET.parse('.repo/manifests/default.xml')
root = tree.getroot()
project = root.find("./project[@name='%s']" % name)
revision = project.get('revision')
res = pattern.match(revision)
return res.group(1)
def main ():
branch_name = "jb_2.5.4"
print "branch_name"
print branch_name
projects = ['platform/vendor/google/proprietary/widevine','platform/vendor/google/proprietary/bluetooth']
for project in projects :
branch = manifest_data(project)
print branch
if __name__ == '__main__':
main()
错误:-
File "branch_manifest.py", line 35, in <module>
main()
File "branch_manifest.py", line 32, in main
branch = manifest_data(project)
File "branch_manifest.py", line 18, in manifest_data
project = root.find("./project[@name='%s']" % name)
File "/usr/lib/python2.6/xml/etree/ElementTree.py", line 330, in find
return ElementPath.find(self, path)
File "/usr/lib/python2.6/xml/etree/ElementPath.py", line 186, in find
return _compile(path).find(element)
File "/usr/lib/python2.6/xml/etree/ElementPath.py", line 176, in _compile
p = Path(path)
File "/usr/lib/python2.6/xml/etree/ElementPath.py", line 93, in __init__
"expected path separator (%s)" % (op or tag)
SyntaxError: expected path separator ([)
【问题讨论】:
-
当我用你的数据运行你的代码时,我得到一个
ParseError: junk after document element: line 2, column 0,因为那是一个 XML 片段,而不是一个完整的文档。如果我将它包装在一个外部标签中,使它成为一个完整的文档,我根本不会收到那个错误;我成功了,然后res = pattern.match(revision)出现错误,因为revision是None。请给我们可以重现您要调试的问题的代码和数据,否则我们无法调试。 -
根据您的错误,我的猜测是,无论您实际为
name传递什么,都会给您一个无意义的 XPath 查询。例如,也许它有一个撇号?帮助调试的一种简单方法是在尝试使用它的行之前打印出"./project[@name='%s']" % name。 -
它在 python2.7 上运行良好,但在 python2.6 上出现了同样的异常
-
@all - 我更新了输入以重现错误..
标签: python