0

我正在使用保存的输出:

svn list -R --xml directory

作为 python 脚本的输入,我当前使用 python 2.6.5 的代码:

import os
import os.path
import sys
import lxml.etree

if len(sys.argv) == 2:
    in_filename = str(sys.argv[1])
    if os.path.isfile (in_filename):
        for ent in lxml.etree.parse (in_filename).iter ('entry'):
            get = ent.xpath
            if ent.get ("kind") == "file":
                log_filename = get ('string(name)')
                log_revision = get ('string(revision)') # This needs Fixing!
                log_date = get ('string(commit/date)')
                print('{0},{1},{2}'.format(log_revision,log_date[:10],log_filename))

我无法从条目中提取revision="1581"属性(1581正是我需要的),其中条目如下所示:

<entry kind="file">
  <name>path/file.c</name>
  <size>3973</size>
  <commit revision="1581">
    <author>user</author>
    <date>2012-09-06T15:40:13.396582Z</date>
  </commit>
</entry>

我可以很容易地获得其他所有内容,只是没有看到如何获得不在条目顶层的属性。

谢谢(如果这是一个菜鸟问题,请道歉)。

4

2 回答 2

1

修订是 commit 元素的一个属性,所以正确的 xpath 语法是commit/@revision,所以:

import os
import os.path
import sys
import lxml.etree

if len(sys.argv) == 2:
    in_filename = str(sys.argv[1])
    if os.path.isfile (in_filename):
        for ent in lxml.etree.parse (in_filename).iter ('entry'):
            get = ent.xpath
            if ent.get ("kind") == "file":
                log_filename = get ('string(name)')
                log_revision = get('string(commit/@revision)') # Fixed ;)
                log_date = get ('string(commit/date)')
                print('{0},{1},{2}'.format(log_revision,log_date[:10],log_filename))
于 2013-06-11T10:04:51.783 回答
1

这也有效:

log_revision = ent.find('commit').get("revision")
于 2013-06-11T10:26:30.867 回答