在python中获取XML属性的值

时间:2018-07-17 09:33:10

标签: python xml

我正在尝试用python解析XML文件,似乎我的XML与常规命名法不同。

下面是我的XML代码段:

   <records>
            <record>
                <parameter>
                    <name>Server</name>
                    <value>Application_server_01</value>
                </parameter
            </record>
   </records>

我试图获取“参数”名称和值的值,但是我似乎得到了空值。

我检查了在线文档,几乎所有XML都采用以下格式

<neighbor name="Switzerland" direction="W"/>

我能够很好地解析,如何在不更改格式的情况下获取XML属性的值。

工作代码

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
for neighbor in root.iter('neighbor'):
    print(neighbor.attrib)

输出

C:/Users/xxxxxx/PycharmProjects/default/parse.py
{'direction': 'E', 'name': 'Austria'}
{'direction': 'W', 'name': 'Switzerland'}
{'direction': 'N', 'name': 'Malaysia'}
{'direction': 'W', 'name': 'Costa Rica'}
{'direction': 'E', 'name': 'Colombia'}

PS:我将使用XML来触发API调用,并怀疑下游应用程序是否需要第二种格式化方式。

下面是我的python代码

import xml.etree.ElementTree as ET
tree = ET.parse('at.xml')
root = tree.getroot()
for name in root.iter('name'):
    print(name.attrib)

上述代码的输出

C:/Users/xxxxxx/PycharmProjects/default/learning.py
{}
{}
{}
{}
{}
{}
{}
{}

1 个答案:

答案 0 :(得分:1)

使用lxml和XPath:

from lxml import etree as et

tree = et.parse(open("/tmp/so.xml"))
name = tree.xpath("/records/record/parameter/name/text()")[0]   
value = tree.xpath("/records/record/parameter/value/text()")[0]
print(name, value)

输出:

Server Application_server_01