python - 如何使用 lxml 创建文档的子集?

标签 python python-2.7 lxml

假设您有一个 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/

相关文章:

python - 我如何停止一次发射超过 1 颗子弹?

python - 通过 flask + redis 服务文件

python - 用 Pymunk 摆动 Spring

python - 无法使用 mechanize 和 Beautifulsoup 从谷歌搜索结果中获取正确的链接

mysql - 如何使用 QuerySets 和 MySql "Full Text Search"在多个字段中进行 Django 搜索?

python - 无法将 lxml etree 对象传递给单独的进程

python - 使用 LXML 编写 XML header

python - 从满足 bool 条件的 NumPy 数组中获取(列,行)索引

python-2.7 - Hadoop Streaming 永无止境

python - 使用 lxml xpath 获取一个元素或引发异常