つまり、要素自体のタグなしで、すべてのテキストとサブタグですか?
持つ
<p>blah <b>bleh</b> blih</p>
私が欲しい
blah <b>bleh</b> blih
element.text は「何とか」を返し、etree.tostring(element) は次を返します。
<p>blah <b>bleh</b> blih</p>
つまり、要素自体のタグなしで、すべてのテキストとサブタグですか?
持つ
<p>blah <b>bleh</b> blih</p>
私が欲しい
blah <b>bleh</b> blih
element.text は「何とか」を返し、etree.tostring(element) は次を返します。
<p>blah <b>bleh</b> blih</p>
これは私が使用することになった解決策です:
def element_to_string(element):
s = element.text or ""
for sub_element in element:
s += etree.tostring(sub_element)
s += element.tail
return s
ElementTree がこれに使用するものであるとは思えません。ただし、それを使用する強い理由があると仮定すると、フラグメントからルート タグを削除してみることができます。
re.sub(r'(^<%s\b.*?>|</%s\b.*?>$)' % (element.tag, element.tag), '', ElementTree.tostring(element))
この回答は、Pupeno の回答をわずかに変更したものです。ここで、エンコーディング タイプを「tostring」に追加しました。この問題には何時間もかかりました。この小さな修正が他の人に役立つことを願っています。
def element_to_string(element):
s = element.text or ""
for sub_element in element:
s += ElementTree.tostring(sub_element, encoding='unicode')
s += element.tail
return s