只今、WordPressからHugoを使った静的サイトに作り替えようとして、その一環でWordPressからエクスポートした記事データの中身がどうなっているのか知りたくなりました。

そこでPythonでXMLパースをしてサクッと見ようと思ったのですが……思ったより時間が掛かった…💦

とりあえずの完成系はこれ

import xml.etree.ElementTree as ET

tree = ET.parse('sblabo.WordPress.2026-02-19.xml')
root = tree.getroot()

def parse_child(elem, count = 0):
    print("   "*count, elem.tag)

    for child in elem:
        parse_child(child, count + 1)

parse_child(root)

ハマりポイントは、for child in elem: ドキュメントにも for child in root: って記述はあるけど、そのchildの子要素はどうやって取り出すんだ? ってなりました。

結果、getroot() で取得したのがElement型で、そのイテレータ(iter())で子要素が取れるんだから、同じ事を取得した要素にもすれば良いという事でした。♪分かってしまえば簡単🎶

これでスッキリです。
ちなみに、このコードで取得できた結果はこんな感じでした。

rss
    channel
       title
       link
       description
       pubDate
       language
       {http://wordpress.org/export/1.2/}wxr_version
       {http://wordpress.org/export/1.2/}base_site_url
       {http://wordpress.org/export/1.2/}base_blog_url
       {http://wordpress.org/export/1.2/}author
          {http://wordpress.org/export/1.2/}author_id
          {http://wordpress.org/export/1.2/}author_login
          {http://wordpress.org/export/1.2/}author_email
          {http://wordpress.org/export/1.2/}author_display_name
          {http://wordpress.org/export/1.2/}author_first_name
          {http://wordpress.org/export/1.2/}author_last_name
       {http://wordpress.org/export/1.2/}category
          {http://wordpress.org/export/1.2/}term_id
          {http://wordpress.org/export/1.2/}category_nicename
          {http://wordpress.org/export/1.2/}category_parent
          {http://wordpress.org/export/1.2/}cat_name
          {http://wordpress.org/export/1.2/}category_description
~~~~ めっちゃ長いので略 ~~~~
       item
          title
          link
          pubDate
          {http://purl.org/dc/elements/1.1/}creator
          guid
          description
          {http://purl.org/rss/1.0/modules/content/}encoded
          {http://wordpress.org/export/1.2/excerpt/}encoded
          {http://wordpress.org/export/1.2/}post_id
          {http://wordpress.org/export/1.2/}post_date
          {http://wordpress.org/export/1.2/}post_date_gmt
          {http://wordpress.org/export/1.2/}post_modified
          {http://wordpress.org/export/1.2/}post_modified_gmt
          {http://wordpress.org/export/1.2/}comment_status
          {http://wordpress.org/export/1.2/}ping_status
          {http://wordpress.org/export/1.2/}post_name
          {http://wordpress.org/export/1.2/}status
          {http://wordpress.org/export/1.2/}post_parent
          {http://wordpress.org/export/1.2/}menu_order
          {http://wordpress.org/export/1.2/}post_type
          {http://wordpress.org/export/1.2/}post_password
          {http://wordpress.org/export/1.2/}is_sticky
          category
          category
          {http://wordpress.org/export/1.2/}postmeta
             {http://wordpress.org/export/1.2/}meta_key
             {http://wordpress.org/export/1.2/}meta_value
          {http://wordpress.org/export/1.2/}postmeta
             {http://wordpress.org/export/1.2/}meta_key
             {http://wordpress.org/export/1.2/}meta_value
          {http://wordpress.org/export/1.2/}postmeta
             {http://wordpress.org/export/1.2/}meta_key
             {http://wordpress.org/export/1.2/}meta_value
          {http://wordpress.org/export/1.2/}postmeta
             {http://wordpress.org/export/1.2/}meta_key
             {http://wordpress.org/export/1.2/}meta_value

多分itemブロックに記事の情報が入っているんでしょう。

こんなのはAIにやらせれば、あっという間なんですけどね。
何でもかんでもAIにさせてたらトークン/リクエストの制限がきちゃいますからね、自力でサクッとできそうなことは自分でやらないとね。(全然サクッとできてないけど……)