如何解决如何在多个级别上 etree findall()
我尝试操作一个未压缩的 XML 导出绘图的 diagrams.net(以前称为 draw.io)。
电缆可以连接到元素,我想得到一个电缆列表。
我通过测试元素是否具有 source
和 target
属性来搜索所有电缆。然后我将两者的 id's
与元素的完整列表进行比较,以找到 value
中的连接标签。
这很好用,直到有人尝试添加“插件标签”。在那之后(即使它被删除),元素被包裹在一个 <object>
中,该 id
具有 source
属性,但 target
和 <mxCell id="ferXMembXyNwfAPwV5vA-22" value="" style="..endless list" edge="1" parent="1" source="ferXMembXyNwfAPwV5vA-8" target="ferXMembXyNwfAPwV5vA-18">
<mxGeometry relative="1" as="geometry">
<mxPoint x="540" y="520" as="sourcePoint" />
<mxPoint x="700" y="520" as="targetPoint" />
</mxGeometry>
</mxCell>
属性保留在一个名为这个:
之前:
<object label="" id="ferXMembXyNwfAPwV5vA-53">
<mxCell style="..endless long list" edge="1" parent="1" source="ferXMembXyNwfAPwV5vA-42" target="ferXMembXyNwfAPwV5vA-51">
<mxGeometry relative="1" as="geometry">
<mxPoint x="660" y="340" as="sourcePoint" />
<mxPoint x="770" y="360" as="targetPoint" />
</mxGeometry>
</mxCell>
</object>
之后:
findall
此 mxCell
适用于格式化为查找 id
、source
和 target
元素的普通 list_of_mxCell_elements = root.findall(root_node,".//*[@source][@target]")
:
objects
这对于 list_of_objects_elements = root.findall(root_node,".//*[@source][@target]/..")
元素 ID:
mxCell
但是我怎样才能从 list_of_objects_elements
访问 source
元素,以便获得 target
和 id=("6",)
statement1 = "select * from posts where id = 6"
statement2 = "select * from posts where id = ?"
db.cursor.execute(statement1)
result = db.cursor.fetchall()
for x in result:
print(x)
db.cursor.execute(statement2,id)
result = db.cursor.fetchall()
for x in result:
print(x)
id?
解决方法
我自己找到了解决方案。
在 findall 'elements' 之后,我遍历元素列表,然后对我得到的每个电缆元素再做一次 findall。
看起来有点像这样:
list_of_objects_elements = root.findall(root_node,'.//*[@source][@target]/..')
for cable in list_of_objects_elements:
for mxCell in cable.findall('./*[@source][@target]'):
注意稍微不同的 findall 路径:
这会在 <mxCells>
中搜索源和目标,同时从根传回下一个更高的元素 <object>
。
.//*[@source][@target]/..
./*[@source][@target]
而较低的搜索源和目标仅在比 <object>
深的一个元素中搜索
对我来说,这些路径仍然是一个Mindblow。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。