【发布时间】:2019-03-11 21:48:04
【问题描述】:
给定以下 xml 结构:
<root>
<a>
<from name="abc">
<b>xxx</b>
<c>yyy</c>
</from>
<to name="def">
<b>blah blah</b>
<c>another blah blah</c>
</to>
</a>
</root>
如何在不加载每个“a”的第一个“from”(使用 find())的情况下直接访问每个“a”的“from.b”的值?
如您所见,“from”和“to”下的元素完全相同。所以 findall() 方法不起作用,因为我必须区分“b”的值来自哪里。
我想获得直接访问的方法,因为如果我必须加载每个子元素(有很多),我的代码会非常冗长。此外,在我的案例中,性能很重要,我还有很多 XML 文档要解析!所以我必须找到最快的方法来浏览文档(并将数据存储到数据库中)
在每个“a”元素中恰好有 1 个“from”元素,在每个“from”元素中恰好有 1 个“b”元素。
我对 lxml objectify 没有问题,但我想使用 etree,因为首先我必须使用 etree 解析 XML 文档,因为我必须首先针对 XSD 文档验证 xml 架构并且我不想再次重新解析整个文档。
【问题讨论】: