【Python】未知のXMLの構造を知るコード

スポンサーリンク

只今、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にさせてたらトークン/リクエストの制限がきちゃいますからね、自力でサクッとできそうなことは自分でやらないとね。(全然サクッとできてないけど……)

スポンサーリンク