python elementtree空白输出

时间:2014-08-04 15:35:56

标签: python xml linux elementtree

我正在解析VCloud的XML输出,但是我无法达到值

  <?xml version="1.0" encoding="UTF-8"?>
    <SupportedVersions xmlns="http://www.vmware.com/vcloud/versions" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.vmware.com/vcloud/versions http://10.10.6.12/api/versions/schema/versions.xsd">
        <VersionInfo>
            <Version>1.5</Version>
            <LoginUrl>https://api.vcd.portal.skyscapecloud.com/api/sessions</LoginUrl>
            <MediaTypeMapping>
                <MediaType>application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml</MediaType>
                <ComplexTypeName>InstantiateVAppTemplateParamsType</ComplexTypeName>
                <SchemaLocation>http://api.vcd.portal.skyscapecloud.com/api/v1.5/schema/master.xsd</SchemaLocation>
            </MediaTypeMapping>
            <MediaTypeMapping>
                <MediaType>application/vnd.vmware.admin.vmwProviderVdcReferences+xml</MediaType>
                <ComplexTypeName>VMWProviderVdcReferencesType</ComplexTypeName>
                <SchemaLocation>http://api.vcd.portal.skyscapecloud.com/api/v1.5/schema/vmwextensions.xsd</SchemaLocation>
            </MediaTypeMapping>
            <MediaTypeMapping>
                <MediaType>application/vnd.vmware.vcloud.customizationSection+xml</MediaType>
                <ComplexTypeName>CustomizationSectionType</ComplexTypeName>
                <SchemaLocation>http://api.vcd.portal.skyscapecloud.com/api/v1.5/schema/master.xsd</SchemaLocation>
            </MediaTypeMapping>

这就是我一直在使用的

import xml.etree.ElementTree as ET
data = ET.fromstring(content)
versioninfo = data.findall("VersionInfo/Version")
print len(versioninfo)
print versioninfo.text

但是这会产生空白输出......有什么建议吗?

1 个答案:

答案 0 :(得分:1)

试试这个:

import xml.etree.ElementTree as ET
data = ET.fromstring(content)
versioninfo = data.find(
    "ns:VersionInfo/ns:Version",
    namespaces={'ns':'http://www.vmware.com/vcloud/versions'})
print versioninfo.text
  • 使用.find(),而非.findall()返回单个元素
  • 您的XML使用名称空间。所需对象的完整路径为:'{http://www.vmware.com/vcloud/versions}VersionInfo/{http://www.vmware.com/vcloud/versions}Version'通过传递namespaces参数,您可以使用快捷语法:ns:VersionInfo/ns:Version