【问题标题】:Get revision value if present,if not get default revision value如果存在则获取修订值,如果不存在则获取默认修订值
【发布时间】: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) 出现错误,因为revisionNone。请给我们可以重现您要调试的问题的代码和数据,否则我们无法调试。
  • 根据您的错误,我的猜测是,无论您实际为 name 传递什么,都会给您一个无意义的 XPath 查询。例如,也许它有一个撇号?帮助调试的一种简单方法是在尝试使用它的行之前打印出"./project[@name='%s']" % name
  • 它在 python2.7 上运行良好,但在 python2.6 上出现了同样的异常
  • @all - 我更新了输入以重现错误..

标签: python


【解决方案1】:

它在 python2.7 上运行良好,但在 python2.6 上出现了同样的异常。

您可以参考ElementTree XPath - Select Element based on attribute。它给出了答案:python2.6 不支持 ./project[@name='%s'] 之类的语法

【讨论】:

  • 正在使用 python 2.7 运行
  • @user2639990,确保您使用 python 2.7 运行程序。您在上面粘贴的异常,从 /usr/lib/python2.6/xml/etree/ElementPath.py 引发异常
  • @user2639990 你确定你运行的是 2.7 吗? /usr/lib/python2.6/xml/etree/ElementPath.py 看起来像是指 Python 2.6 模块
猜你喜欢
  • 2022-12-15
  • 1970-01-01
  • 2011-06-26
  • 2019-05-16
  • 2017-04-03
  • 2013-09-10
  • 2017-08-15
  • 2012-03-22
  • 2018-03-06
相关资源
最近更新 更多