2013-08-06 85 views
-1

该文件包含以下几行。解析fvdl文件的python lxml 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.I正在使用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文件之前工作过。然而,它未能对上述文件(版本是在执行的最后一个空表)

回答

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']

+0

如果你不知道匿名命名空间(它是context.nsmap中的None项),你可以这样做:'namespaces = dict((k或'fvdl',v)for k,v in context.nsmap.iteritems())' – tdelaney

0

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

ver = context.xpath('//*[local-name()="FVDL"]') 
1
context = etree.parse(file_handle) 
ver = context.getroot() 
print ver.attrib['version'] 

output:'1.9'