gpt4 book ai didi

python - 使用 Python lxml 删除处理指令

转载 作者:太空狗 更新时间:2023-10-29 22:29:55 24 4
gpt4 key购买 nike

我正在使用 python lxml 库将 XML 文件转换为新模式,但我在从 XML 正文解析处理指令时遇到了问题。

处理指令元素分散在整个 XML 中,如下例所示(它们都以“oasys”开头并以唯一代码结尾):

string = "<text><?oasys _dc21-?>Text <i>contents</i></text>"

我无法通过 lxml.etree.findall() 方法找到它们,尽管 etree.getchildren() 返回它们:

tree = lxml.etree.fromstring(string)
print tree.findall(".//")
>>>> [<Element i at 0x747c>]
print tree.getchildren()
>>>> [<?oasys _dc21-?>, <Element i at 0x747x>]
print tree.getchildren()[0].tag
>>>> <built-in function ProcessingInstruction>
print tree.getchildren()[0].tail
>>>> Text

除了使用 getchildren() 来解析和删除处理指令之外,是否有替代方法,特别是考虑到它们嵌套在整个 XML 的不同级别?

最佳答案

您可以使用 processing-instruction() XPath 节点测试以查找处理指令并使用 etree.strip_tags() 删除它们.

例子:

from lxml import etree

string = "<text><?oasys _dc21-?>Text <i>contents</i></text>"
tree = etree.fromstring(string)

pis = tree.xpath("//processing-instruction()")
for pi in pis:
etree.strip_tags(pi.getparent(), pi.tag)

print etree.tostring(tree)

输出:

<text>Text <i>contents</i></text>

关于python - 使用 Python lxml 删除处理指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31522162/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com