

# 環境

  * Python3.9
  * [lxml](https://lxml.de/) v4.9.2

# やりたいこと

HTMLファイルをConfluenceにインポートするために、[Confluence用のXML](https://confluence.atlassian.com/conf713/confluence-
storage-format-1077913458.html)に変換したいです。

Confluenceでは、画像は`<ac:image>`タグを使って表現します。  
Pythonの[lxml](https://lxml.de/)ライブラリを使って、`<ac:image>`タグを生成したいです。

# 問題

以下のコードを実行すると、ValueErrorが発生しました。

[code]

    from lxml import etree
    elm = etree.Element("ac:image")
    print(elm.tag)
    
[/code]

[code]

    File src/lxml/etree.pyx:3042, in lxml.etree.Element()
    File src/lxml/apihelpers.pxi:101, in lxml.etree._makeElement()
    File src/lxml/apihelpers.pxi:1754, in lxml.etree._tagValidOrRaise()
    ValueError: Invalid tag name 'ac:image'
    
    
[/code]

# 質問

コロンを含むタグをlxmlで生成したい場合は、どのように実行すればよいでしょうか？

`lxml.html.fromstring`で適当な名前で要素を作り、後からtagを書き替えることで、やりたいことは実現できました。

[code]

    from lxml import html
    # テキトーな名前でタグを生成する
    elm = html.fromstring("<foo />")
    print(elm.tag)
    # → image
    elm.tag = "ac:image"
    print(elm.tag)
    # → ac:image
    
[/code]

ただ、正しいやり方ではない気がするので、もっと良い方法を知りたいです。


CC BY-SA 4.0
2023-02-16T06:58:48.853
93868
2023-02-16T06:58:48.853
19524
question
python html
`<ac:image>`などコロンを含むタグを、Pythonのlxmlライブラリで生成したいです。