3

Pythonでlibxml2を使用しています。残念ながら、このライブラリの python バージョンの文書化は非常に不十分であり、そこから Web 上にいくつかの例を見つけただけで、メソッドの一部を理解できました。

すぐに XML ノードを追加できました。この要素は既存の要素を置き換える必要があるため、前の要素を削除したいのですが、子を削除する方法が見つかりませんでした。

メソッド名が何かわかる人いますか?このライブラリに関するまともなドキュメントを持っている人はいますか?

乾杯

4

3 に答える 3

5

メソッドを使用し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>
于 2011-10-31T15:07:04.023 に答える
1

lxmllibXML2のバインディングを使用しているということですか? それらはhttp://lxml.de/でかなりよく IMO に文書化されています。

要素はリストであると述べています。したがって、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>"
于 2011-10-31T13:49:44.090 に答える
0

完全を期すために、削除したいアイテムが属性unsetPropである場合は、次の方法を選択します。

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

このライブラリに関するまともなドキュメントを持っている人はいますか?

このlibxml2のドキュメントは私を大いに助けてくれました。

于 2016-04-04T13:33:45.970 に答える