4

tag.renderContents()lxmlにBeautifulSoupのメソッドに相当するものはありますか?

を使用してみましelement.textたが、子タグも表示され''.join(etree.tostring(child) for child in element)ませんが、子テキストは表示されません。私が見つけた最も近いものはですが、それは私が望まないetree.tostring(element)の開始タグと終了タグをレンダリングします。element

私が見落としている別の方法(またはこれを達成するための代替アプローチ)はありますか?

4

2 に答える 2

1

あなたはあなたのオリジナルのアイデアでほとんどそこにいます。element.text要素の最初のテキストの子を提供し、リスト内包表記は他のすべてを提供します。2つの文字列を連結すると、探しているものが得られます。

>>> xmlstr = "<sec>header <p>para 0</p> text <p>para 1</p> footer</sec>"
>>> element = etree.fromstring(xmlstr)
>>>
>>> element.text + "".join(map (etree.tostring, element))
'header <p>para 0</p> text <p>para 1</p> footer'
>>>

アリ。

于 2010-02-13T04:25:14.243 に答える
0

1つのハックな解決策:

from lxml import etree
def render_contents(element):
    """
    Surely there is a safe lxml built-in for this...
    """
    tagname = element.tag
    return re.sub('</%s>\s*$' % tagname, '',
                  re.sub(r'^<%s(\s+\w+=".*?")*?>' % tagname,
                         '', etree.tostring(element))).strip()

編集

本当に、これより良い方法はありませんか?

于 2010-01-14T04:59:54.970 に答える