問題はこれです:私はそうのようなXMLフラグメントがあります - ちょうどと<c>
- タグが、その(テキスト)-contentsを保持し、のchildNodes結果についてlxmlでは、タグは削除しますが、すべての内容は保持しますか?
<fragment>text1 <a>inner1 </a>text2 <b>inner2</b> <c>t</c>ext3</fragment>
を、私はすべての<a>
を削除したいです彼らはあるとして。また、<b>
-Elementは変更しないでください。結果は、当分の間これ
<fragment>text1 inner<d>1</d> text2 <b>inner2</b> text3</fragment>
はず、私は非常に汚いトリックに戻りましょう:私は、フラグメントをetree.tostring正規表現を経由して、問題のあるタグを削除し、そして元でフラグメントを置き換えます
from lxml import etree
fragment = etree.fromstring("<fragment>text1 <a>inner1 </a>text2 <b>inner2</b> <c>t</c>ext3</fragment>")
fstring = etree.tostring(fragment)
fstring = fstring.replace("<a>","")
fstring = fstring.replace("</a>","")
fstring = fstring.replace("<c>","")
fstring = fstring.replace("</c>","")
fragment = etree.fromstring(fstring)
私はおそらくこれを達成するために、XSLTを使用することができることを知って、私はlxmlのは、XSLTを利用することができることを知っている:この(ない実際のコードが、このような何かを行くべき)のetree.fromstring結果しかし、より多くのlxmlネイティブアプローチが必要ですか?
参考までに:私はlxmlのelement.replaceを使ってそこに到達しようとしましたが、前に要素ノードがあった場所にテキストを挿入したいので、私はそれを行うことはできません。
ありがとう、これは完全に動作します。 「ストリップ」という言葉は私には起きなかったし、自分自身で答えを見つけたかもしれない。 – Thor
真剣に。あなたはPyCon 2011に参加する予定ですか?もしそうなら、あなたにビールを買ってもらうか、あなたの好みの飲み物を買ってください。あなただけで私の夜を作った:) – mkelley33
また、素晴らしい: '' etree.strip_elements(フラグメント、* ['tag1'、 'tag2']) '' – mkelley33