【发布时间】:2022-01-07 07:50:22
【问题描述】:
编辑 - 问题是我运行的是过时版本的 lxml - 我现在觉得自己很愚蠢,但我很高兴我发现了。
我在遍历 XML 树以导出单个子元素时遇到问题。
我正在寻找的是隔离子元素并将它们导出到单独的 xml 文件中。但我的问题是,当我使用“etree.iter”函数时,我不仅得到了子元素,还得到了所有后续的兄弟姐妹。我怎样才能一次只获取一个子元素?
这应该更好地解释它。这是我的示例代码:
from lxml import etree
root = etree.XML("<users><user><name>Test</name><id>01</id></user> \
<user><name>Test</name><id>02</id></user> \
<user><name>Test</name><id>03</id></user></users>")
for record in root.iter("user"):
print(etree.tostring(record))
它产生以下输出
b'<user><name>Test</name><id>01</id></user><user><name>Test</name><id>02</id></user><user><name>Test</name><id>03</id></user></users>'
b'<user><name>Test</name><id>02</id></user><user><name>Test</name><id>03</id></user></users>'
b'<user><name>Test</name><id>03</id></user></users>'
但我需要的是
b'<user><name>Test</name><id>01</id></user>'
b'<user><name>Test</name><id>02</id></user>'
b'<user><name>Test</name><id>03</id></user>'
我做错了什么?
【问题讨论】:
-
我尝试使用 xpath,但遇到了同样的问题:
records = root.xpath('//user'),然后使用for record in records:遍历它们,但这会产生完全相同的结果。 -
对我来说很好用(版本 4.6.4)
-
将 lxml 更新到 4.6.4 后已解决。感谢您的帮助!