假设您有一个 lmxl.etree 元素,其内容如下:
<root>
<element1>
<subelement1>blabla</subelement1>
</element1>
<element2>
<subelement2>blibli</sublement2>
</element2>
</root>
我可以使用 find 或 xpath 方法来获取呈现类似以下内容的元素:
<element1>
<subelement1>blabla</subelement1>
</element1>
有没有一种简单的方法来获得:
<root>
<element1>
<subelement1>blabla</subelement1>
</element1>
</root>
即感兴趣的元素加上它的所有祖先直到文档根?
最佳答案
我不确定是否有内置的东西,但这里有一个可怕的“永远不要在现实生活中使用它”类型的解决方法,使用 iterancestors()
parent iterator :
from lxml import etree as ET
data = """<root>
<element1>
<subelement1>blabla</subelement1>
</element1>
<element2>
<subelement2>blibli</subelement2>
</element2>
</root>"""
root = ET.fromstring(data)
element = root.find(".//subelement1")
result = ET.tostring(element)
for node in element.iterancestors():
result = "<{name}>{text}</{name}>".format(name=node.tag, text=result)
print(ET.tostring(ET.fromstring(result), pretty_print=True))
打印:
<root>
<element1>
<subelement1>blabla</subelement1>
</element1>
</root>
关于python - 如何使用 lxml 创建文档的子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40135280/