python lxml etree解析fvdl文件

时间:2013-08-06 16:03:45

标签: python xml-parsing lxml xml.etree

该文件包含以下行。

<?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是执行结束时的空列表)

3 个答案:

答案 0 :(得分:1)

替代@fattru的答案

(通过“尝试阅读版本标签”,我理解“版本属性”(可能不是您想要的))

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

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

或者风险更高,如果你知道你想知道根节点的version属性

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

两者都给['1.9']

答案 1 :(得分:1)

context = etree.parse(file_handle)
ver = context.getroot()
print ver.attrib['version']

output:'1.9'

答案 2 :(得分:0)

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

ver = context.xpath('//*[local-name()="FVDL"]')