使用lxml访问根元素之前/之后的处理指令

劳伦·拉波特(Laurent LAPORTE)

使用lxml,我如何访问/迭代位于root open标签之前或root close标签之后的处理指令?

我已经尝试过了,但是根据文档,它只在根元素内部进行迭代:

import io

from lxml import etree

content = """\
<?before1?>
<?before2?>
<root>text</root>
<?after1?>
<?after2?>
"""

source = etree.parse(io.StringIO(content))

print(etree.tostring(source, encoding="unicode"))
# -> <?before1?><?before2?><root>text</root><?after1?><?after2?>

for node in source.iter():
    print(type(node))
# -> <class 'lxml.etree._Element'>

我唯一的解决方案是用伪元素包装XML:

dummy_content = "<dummy>{}</dummy>".format(etree.tostring(source, encoding="unicode"))
dummy = etree.parse((io.StringIO(dummy_content)))

for node in dummy.iter():
    print(type(node))
# -> <class 'lxml.etree._Element'>
#    <class 'lxml.etree._ProcessingInstruction'>
#    <class 'lxml.etree._ProcessingInstruction'>
#    <class 'lxml.etree._Element'>
#    <class 'lxml.etree._ProcessingInstruction'>
#    <class 'lxml.etree._ProcessingInstruction'>

有更好的解决方案吗?

z

您可以在根元素上使用getprevious()getnext()方法。

before2 = source.getroot().getprevious()
before1 = before2.getprevious()

after1 = source.getroot().getnext()
after2 = after1.getnext()

参见https://lxml.de/api/lxml.etree._Element-class.html


也可以使用XPath(在ElementTreeElement实例上):

before = source.xpath("preceding-sibling::node()")  # List of two PIs
after = source.xpath("following-sibling::node()")

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 HTML 元素事件处理程序访问指令范围

使用Python lxml处理嵌套元素

如何使用 lxml 删除 XML 文档根元素之外的注释

如何使用lxml从根元素获取XML前缀声明

使用javascript jquery在元素之后或元素之前添加html

使用jq在json中匹配的元素之后/之前获取元素

访问元素指令子代

访问指令元素

使用lxml etree直接访问元素和属性

在伪元素之前和之后使用以进行线条

在伪元素之前和之后使用CSS创建向左箭头

基本使用伪元素时,Sass&符(之前/之后)

设置AngularJS指令的根元素的样式

影子根内部的访问元素

使用OCaml Menhir,是否可以在处理之前访问某些内容?

如果元素只有一个或零个(空),则在元素之前添加XML处理指令

AngularJS:在指令模板中使用“ th”标记时,“指令模板必须完全具有一个根元素”

一种使用v-for指令在VueJS上呈现多个根元素的方法

为什么在访问元素之前在容器上使用std :: forward?

列车测试拆分之前或之后的处理

AngularJS指令在元素完全加载之前运行

在Python lxml中访问子XML元素

lxml-元素上元标记的访问值

使用 org.w3c.dom 在根节点之前和序言之后插入/附加注释的问题

在伪元素之前和之后添加链接

CSS:如何删除伪元素(之后,之前,...)?

在“输入”元素之前或之后的CSS内容生成

在某些条件之前和之后匹配元素

春季批处理:在CompositeItemWriter中使用之前和之后的方法