使用 lxml 获取单个子笔记
Get a single child note using lxml
编辑 - 问题是我 运行 是 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>'
我做错了什么?
不太确定为什么 iter
会产生这样的错误。试试这个,它工作正常。
xn = etree.fromstring("<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>")
user_nodes = xn.findall("user")
str_nodes = [etree.tostring(un) for un in user_nodes]
print(str_nodes)
产生预期的输出
[
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>']
编辑 - 问题是我 运行 是 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>'
我做错了什么?
不太确定为什么 iter
会产生这样的错误。试试这个,它工作正常。
xn = etree.fromstring("<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>")
user_nodes = xn.findall("user")
str_nodes = [etree.tostring(un) for un in user_nodes]
print(str_nodes)
产生预期的输出
[
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>']