python lxml在另一个元素之后追加元素
[英] python lxml append element after another element
本文介绍了python lxml在另一个元素之后追加元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下 HTML 标记
<div id="content_nav">这里有东西
<p>一些内容</p>
为了解决一些 CSS 问题,我想在 content_nav
之后附加一个 div 标签 <div style="clear:both"></div>
这样的div
<div id="content_nav">这里有东西
<div style="clear:both"></div><p>一些内容</p>
我是这样做的:
import lxml.etree树 = lxml.etree.fromString(inputString, parser=lxml.etree.HTMLParser())contentnav = tree.find(".//div[@id='content_nav']")contentnav.append(lxml.etree.XML("<div style='clear: both'></div>"))
但这不会在 content_nav
div 之后添加新的 div
而是在里面.
这里有东西<div style="clear:both"></div>
有什么办法可以在content_nav
div 中间添加一个div
和一些p
里面的contents
代码>?
谢谢
解决方案
不要附加到 contentnav
,而是向上到父级 (contentdiv
) 和 insert
特定索引处的新 div
.要找到该索引,请使用 contentdiv.index(contentnav)
,它给出 contentdiv
中 contentnav
的索引.加一得到所需的索引.
import lxml.etree 作为 ET内容='''\<div id="内容"><div id="content_nav">这里有东西
<p>一些内容</p>
'''树 = ET.fromstring(content, parser=ET.HTMLParser())contentnav = tree.find(".//div[@id='content_nav']")contentdiv = contentnav.getparent()contentdiv.insert(contentdiv.index(contentnav)+1,ET.XML("<div style='clear: both'></div>"))打印(ET.tostring(树))
收益
<div id="content_nav">这里有东西
<div style="clear: both"/><p>一些内容</p></div></body></html>
I have the following HTML markup
<div id="contents">
<div id="content_nav">
something goes here
</div>
<p>
some contents
</p>
</div>
To fix some CSS issue, I want to append a div tag <div style="clear:both"></div>
after the content_nav
div like this
<div id="contents">
<div id="content_nav">
something goes here
</div>
<div style="clear:both"></div>
<p>
some contents
</p>
</div>
I am doing it this way:
import lxml.etree
tree = lxml.etree.fromString(inputString, parser=lxml.etree.HTMLParser())
contentnav = tree.find(".//div[@id='content_nav']")
contentnav.append(lxml.etree.XML("<div style='clear: both'></div>"))
But that doesn't append the new div
right after content_nav
div but inside.
<div id="content_nav">
something goes here
<div style="clear:both"></div>
</div>
Is there any way to add a div
in the middle of content_nav
div and some p
like that inside contents
?
Thanks
解决方案
Instead of appending to contentnav
, go up to the parent (contentdiv
) and insert
the new div
at a particular index. To find that index, use contentdiv.index(contentnav)
, which gives the index of contentnav
within contentdiv
. Adding one to that gives the desired index.
import lxml.etree as ET
content='''\
<div id="contents">
<div id="content_nav">
something goes here
</div>
<p>
some contents
</p>
</div>
'''
tree = ET.fromstring(content, parser=ET.HTMLParser())
contentnav = tree.find(".//div[@id='content_nav']")
contentdiv = contentnav.getparent()
contentdiv.insert(contentdiv.index(contentnav)+1,
ET.XML("<div style='clear: both'></div>"))
print(ET.tostring(tree))
yields
<html><body><div id="contents">
<div id="content_nav">
something goes here
</div>
<div style="clear: both"/><p>
some contents
</p>
</div></body></html>
这篇关于python lxml在另一个元素之后追加元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!