-1

该文件包含以下几行。

<?xml version="1.0" encoding="UTF-8"?>
<FVDL xmlns="xmlns://www.fortifysoftware.com/schema/fvdl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.9" xsi:type="FVDL">`
<CreatedTS date="2013-08-06" time="11:8:48" />`

我正在尝试读取 FVDL 中的版本标签。我正在使用 lxml etree,我的代码片段是

from lxml import etree
with open(os.path.join(analysis,"merged-results.fvdl") ,"r") as file_handle:
  context = etree.parse(file_handle)
  ver = context.xpath('//FVDL')
  print ver

这在解析标准 xml 文件之前已经起作用。但是,上述文件失败了。(ver在执行结束时是一个空列表)

4

3 回答 3

1

替代@falsetru的答案

(通过“试图读取版本标签”,我理解“版本属性”(这可能不是你想要的))

在“fvdl”前缀下显式注册 fvdl 命名空间:

ver = context.xpath('//fvdl:FVDL/@version',
          namespaces={"fvdl": "xmlns://www.fortifysoftware.com/schema/fvdl"})

或者,风险更大,如果你知道你想要version来自根节点的属性

ver = context.xpath('/*/@version')

两者都给['1.9']

于 2013-08-06T16:20:19.587 回答
1
context = etree.parse(file_handle)
ver = context.getroot()
print ver.attrib['version']

output:'1.9'
于 2013-08-06T16:20:56.913 回答
0

使用[local-name()=...]

ver = context.xpath('//*[local-name()="FVDL"]')
于 2013-08-06T16:07:54.883 回答