python lxml在另一个元素之后追加元素 [英] python lxml append element after another element

查看:28
本文介绍了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),它给出 contentdivcontentnav 的索引.加一得到所需的索引.

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屋!

查看全文
相关文章
前端开发最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆