如何通过python访问XML中的值,其结构如下?

2024-09-30 16:21:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用python脚本访问XML中的值时遇到困难。您如何在此处访问Value1-Value4?我尝试过使用findall()函数,但没有任何结果

tree =ET.parse('example.xml')

root=tree.getroot()

for child in root.findall("row"):
    print(child)

XML如下所示:

<?xml version="1.0" encoding="ISO-8859-1"?>
<entities xmlns="http://www.example.com">
<entity id="Title" dataDate="2018-08-31">
<spreadsheetContainer name="ContainerA">
<row>
<col name="A">Value1</col>
<col name="B">Value2</col>
<col name="C">Value3</col>
<col name="D">Value4</col>
</row>
</spreadsheetContainer>
</entity>
</entities>

Tags: namechildtreeexamplecolrootxmlrow
1条回答
网友
1楼 · 发布于 2024-09-30 16:21:57

第一点:您要查找的标记不是“行”,而是“列”

第二点:这些标记不是根节点的直接子节点,它们嵌套在实体中−&燃气轮机;电子表格容器->;行,所以您需要使用XPath表达式(或者手动遍历dom,但XPath为您完成了这项工作…)

第三点:XML是有名称空间的(参见根标记中的xmlns="http://www.example.comattrib),因此需要为xpath表达式(或任何实际的标记查找)命名名称空间

因此,您需要的代码实际上是:

from lxml.etree import ElementTree as ET

namespace = "{http://www.example.com}"
path = "{0}entity/{0}spreadsheetContainer/{0}row/{0}col".format(namespace)
root = ET.parse("example.xml")
values = [col.text for col in root.findall(path)]

相关问题 更多 >