我正在尝试用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
{}
{}
{}
{}
{}
{}
{}
{}
答案 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