2011-09-14 138 views
0

關於xpath的,蟒一個具體問題,libxml2domxpath - libxml2dom將元素插入到dom中?

假設以下HTML測試

一個如何可以創建蟒/ xpath的邏輯與的xpath相關聯的TR之前插入在DOM元素=「// tr/td [@ class ='foo']「

我知道有libxml2dom的相關方法來完成這個..但我找不到關於如何做到這一點的文檔/例子!

感謝..

<html> 
<body> 
<tr> 
<td class="foo"> 
</td> 
</tr> 
<tr> 
<td> 
</td> 
</tr> 
<tr> 
<td class="foo"> 
</td> 
</tr> 
</body> 
</html> 

我想這個..其中一個 「格」 是圍繞TD/TD加..

<html> 
<body> 
<div> 
<tr> 
<td class="foo"> 
</td> 
</tr> 
</div> 
<tr> 
<td> 
</td> 
</tr> 
<div> 
<tr> 
<td class="foo"> 
</td> 
</tr> 
</div> 
</body> 
</html> 

指針/意見..謝謝

回答

0

是的,libxml2的Python綁定文檔非常稀少。無論如何,這是我會怎麼做?

import libxml2 
html = '<html><body><tr><td class="foo"></td></tr><tr><td></td></tr><tr><td class="foo"></td></tr></body></html>' 
doc = libxml2.parseDoc(html) 
for elem in [xeval.parent for xeval in doc.xpathEval('//tr/td[@class="foo"]')]: 
    # Create a new div element 
    newdiv = libxml2.newNode('div') 
    # Copy current node 
    node_copy = elem.copyNode(1) 
    # Append current node copy to new div element 
    newdiv.addChild(node_copy) 
    # Replace current node with new div 
    elem.replaceNode(newdiv) 

印刷文檔然後給你:

<?xml version="1.0"?> 
<html><body><div><tr><td class="foo"/></tr></div><tr><td/></tr><div><tr><td class="foo"/></tr></div></body></html> 

我知道,有一個XML根元素坐在那裏 - 我敢肯定有人可以想出一種擺脫它的方式!