我在python下使用libxml2。不幸的是,這個庫的Python版本實際上記錄得很糟糕,我從那裏創建了很少的例子,我可以理解一些方法。python libXML2刪除項目
我所管理的加入很快TE的一種XML節點。由於這個元素應該替換現有的元素,所以我想刪除之前的元素,但是我找不到刪除孩子的方法。
有誰知道什麼是方法的名字嗎?有沒有人有關於這個圖書館的體面文件?
乾杯
我在python下使用libxml2。不幸的是,這個庫的Python版本實際上記錄得很糟糕,我從那裏創建了很少的例子,我可以理解一些方法。python libXML2刪除項目
我所管理的加入很快TE的一種XML節點。由於這個元素應該替換現有的元素,所以我想刪除之前的元素,但是我找不到刪除孩子的方法。
有誰知道什麼是方法的名字嗎?有沒有人有關於這個圖書館的體面文件?
乾杯
您可以使用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')
找到<div>
節點是這樣的:
>>> node = doc.xpathEval('//*[@id="content"])[0]
,並刪除它像這樣:
>>> node.unlinkNode()
現在,如果你打印出來的文檔,你會得到這樣的:
>>> print doc
<head>
<title>Document Title</title>
</head>
<body>
</body>
</html>
你的意思是你使用的是lxml
綁定的libxml2?他們被合理記錄在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>"
爲了完整起見,如果要刪除的項目是屬性unsetProp
是選擇的方法:
...
if node.hasProp('myAttributeName'):
node.usetProp('myAttributeName')
有沒有人有關於此庫的體面的文檔?
This libxml2 documentation幫助了我很多。
pydoc命令的岩石。我不知道! :) – Stefano
完美。抱歉打擾,但我是這個圖書館的新手。你知道爲什麼當我添加一些項目,它們都在同一行上廣告?你知道如何得到一個漂亮的代表嗎?非常感謝他幫助你已經給我了! :) – Stefano
如果因爲某些原因你不需要使用這個庫,我真的會推薦移植到lxml,這是一個pythonic更多,並有更好的文檔。 – larsks