python - 如何通过 python 访问结构如下的 XML 中的值?
问题描述
我在使用 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>
解决方案
第一点:您要查找的标签不是“row”而是“col”。
第二点:这些标签不是根节点的直接子节点,它们嵌套在实体 -> 电子表格容器 -> 行中,因此您需要使用 XPath 表达式(或手动遍历 dom,但 xpath 会为您完成.. .)
第三点:您的 XML 是命名空间(参见xmlns="http://www.example.com
根标记中的属性),因此您需要命名 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)]
推荐阅读
- angular - Angular 7 材质卡看起来像 pinterest?
- reactjs - React无法读取componentDidMount中未定义的属性'then'
- flutter - 从资产加载图像时出错
- java - Spring:是否可以在新建应用程序上下文时指定 default-lazy-init 值?
- asp.net-core - ASP.NET Core 2.2 InvalidOperationException:ConnectionString 属性尚未初始化
- python - tuple(str) 每个字符返回一个元组元素
- python - Django - 禁止(CSRF 令牌丢失或不正确。)
- loopback - LoopBack 命令提示符在运行应用程序后被禁用
- python - /map 处的 AttributeError 在 Django 中创建 folium 地图
- c++ - 函子和迭代槽向量