HTML を操作するために Python ElementTreeモジュールを使用しています。特定の単語を強調したいのですが、現在の解決策は次のとおりです。
for e in tree.getiterator():
for attr in 'text', 'tail':
words = (getattr(e, attr) or '').split()
change = False
for i, word in enumerate(words):
word = clean_word.sub('', word)
if word.lower() in glossary:
change = True
words[i] = word.replace(word, '<b>' + word + '</b>')
if change:
setattr(e, attr, ' '.join(words))
上記は、各要素のテキストを調べて、見つかった重要な単語を強調しています。ただし、テキスト属性にHTMLタグを埋め込むことでこれを行います。これは、レンダリング時にエスケープされるため、次のように対処する必要があります。
html = etree.tostring(tree).replace('>', '>').replace('<', '<')
これは気持ち悪いのでちゃんとやりたいです。ただし、新しい要素を埋め込むには、強調されたテキストが同じ位置に表示されるように、「テキスト」属性と「テール」属性をシフトする必要があります。そして、上記のように反復する場合、これは非常に注意が必要です。
これを適切に行うためのアドバイスをいただければ幸いです。APIで見逃しているものがあると確信しています!