python libXML2 删除项目

发布于 2024-12-13 09:47:36 字数 1539 浏览 2 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

青衫负雪 2024-12-20 09:47:36

您可以使用 unlinkNode() 方法删除给定节点。一般来说,大多数适用于节点的方法都有文档记录,请尝试:

pydoc libxml2.xmlNode

对于 unlinkNode,文档说:

unlinkNode(self)
    Unlink a node from it's current context, the node is not
    freed

例如,给定此输入:

<html>
  <head>
    <title>Document Title</title>
  </head>
  <body>
    <div id="content">This is a test.</div>
  </body>
</html>

您可以像这样解析文件:

>>> import libxml2
>>> doc = libxml2.parseFile('input.html')

找到

节点如下:

>>> node = doc.xpathEval('//*[@id="content"])[0]

并像这样删除它:

>>> node.unlinkNode()

现在,如果打印出文档,您会得到以下结果:

>>> print doc
<head>            
    <title>Document Title</title>
</head>
<body>

</body>
</html>

You can use the unlinkNode() method to remove a given node. In general, most of the methods that apply to nodes are documented, try:

pydoc libxml2.xmlNode

For unlinkNode, the documentation says:

unlinkNode(self)
    Unlink a node from it's current context, the node is not
    freed

For example, given this input:

<html>
  <head>
    <title>Document Title</title>
  </head>
  <body>
    <div id="content">This is a test.</div>
  </body>
</html>

You can parse the file like this:

>>> import libxml2
>>> doc = libxml2.parseFile('input.html')

Locate the <div> node like this:

>>> node = doc.xpathEval('//*[@id="content"])[0]

And remove it like this:

>>> node.unlinkNode()

And now if you print out the document, you get this:

>>> print doc
<head>            
    <title>Document Title</title>
</head>
<body>

</body>
</html>
青朷 2024-12-20 09:47:36

您的意思是您正在使用 libXML2 的 lxml 绑定吗? IMO 在 http://lxml.de/ 上对它们进行了相当详细的记录。

它提到元素是列表。因此,您可以使用remove列表函数来删除节点。

import lxml
root = lxml.etree.Element("root")
child2 = lxml.etree.SubElement(root, "child2")
child3 = lxml.etree.SubElement(root, "child3")
print lxml.etree.tostring(root)
#    "<root><child2/><child3/></root>"
root.remove( child2 )
print lxml.etree.tostring(root)
#    "<root><child3/></root>"

Do you mean that you are using the lxml bindings for libXML2? They're documented reasonably well IMO at http://lxml.de/.

It mentions that elements are lists. So you can use the remove list function to remove a node.

import lxml
root = lxml.etree.Element("root")
child2 = lxml.etree.SubElement(root, "child2")
child3 = lxml.etree.SubElement(root, "child3")
print lxml.etree.tostring(root)
#    "<root><child2/><child3/></root>"
root.remove( child2 )
print lxml.etree.tostring(root)
#    "<root><child3/></root>"
秋凉 2024-12-20 09:47:36

为了完整起见,如果您要删除的项目是属性,则可以选择 unsetProp 方法:

...
if node.hasProp('myAttributeName'):
   node.usetProp('myAttributeName')

有人有关于这个库的像样的文档吗?

这个 libxml2 文档对我帮助很大。

For the sake of completeness, if the item you want to remove is an attribute unsetProp is the method of choice:

...
if node.hasProp('myAttributeName'):
   node.usetProp('myAttributeName')

Does anyone have a decent documentation about this library?

This libxml2 documentation helped me alot.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文