sbで行こう


ENTRY

[tips] XML ファイルの分割

2003年末あたりからの blog ブームで、Web ホスティング型 blog のサービス提供数や blog 人口が爆発的に増えている一方、諸般の事情で blog をお引越しをする方もたくさんいらっしゃるようです。かくいうふうこもその一人でしたけれども。

blog の引越しで最終的に問題になるのは、過去ログの移行です。特に sb を始める JUGEM ユーザさんなどは、sb を設置して正常稼働を確認して、やれ一安心と JUGEM からエクスポートした XML ファイルをインポートしようとした時に Out of memory ... というエラーに遭遇することがあります。これはエクスポートした XML ファイルが大きすぎることによるもので、XML ファイルを分割してインポートすれば解決します。が、単なるファイルの分割と違ってXML なんか見たことも食べたこともないという方には何をどう分割してよいのか分からないでしょうから、ここでさくっと XML ファイルの分割方法についてメモっておきます。

XML ファイルの分割は手動で行います。「便利な分割ソフト」というものはない、と思います。まじめに探したことはないですが、そうそう何度も使う機能ではないので…。

道具

XML ファイルの分割の際には、以下のソフトウェアが必要です。

  • 文字エンコーディングが "utf-8" であるファイルを表示できるテキストエディタ

…何やら小難しげなことを申しましたが、Windows 2000 や Windows XP をお使いの方は「メモ帳」でいけます。2004-12-15T15:35:24+09:00 追記:「メモ帳」はだめなことが分かりました。詳しくは XML ファイルの分割(追補)で。それ以外の古い Windows をお使いの方は、メモ帳ではあまり大きいファイルを扱えないので、シェアウェア紹介サイトなどで utf-8 の文字エンコーディングを扱えるエディタをお探し下さい。何分ふうこは Mac 使いなもので(_ _)。MacOS をお使いの方は、OSX なら「テキストエディット」でもいけますが、OS9 以前なら「mi」がお勧めです。まぁ理屈が分からなくても文字化けさえしなければ何でもいいのですけど…。テキストエディタの使用方法についての解説はご容赦下さいませ。

XML ファイルの中身

作業手順に入る前に、今から何をするのか把握するために XML ファイルについて説明します。XML は HTML の親分的存在で、HTML と同じように <> で囲まれた「タグ」で文書構造を表現するマークアップ言語です。またしても難しげですが、見て確かめればそこまで難しくはないことが分かって頂けると思います。JUGEM / sb で採用されている XML は以下の構造を持っています。(注:JUGEM からエクスポートした XML 文書は閉じタグの後ろに改行がありません。)

<?xml version="1.0" encoding="utf-8" ?>
<blog>
  <name>ブログタイトル</name>
  <description><![CDATA[ブログの説明。]]></description>
  <users>
    <user>ユーザ情報</user>
  </users>
  <entries>
    <entry>エントリ情報(エントリ内容、コメント、トラックバック等)</entry>
    <entry>エントリ情報</entry>
      :
      :
    <entry>エントリ情報</entry>
  </entries>
</blog>

HTML に馴染みのある方であれば、一見して <blog></blog> というタグの中にエクスポート元の blog に関連する全ての情報が入っているのが分かると思います。

さて、上記のうちで分割が必要なのは <entries></entries> で囲まれたエントリ情報群になります。XML は HTML の親分であるという事実からも分かる通り「タグが入れ子になっている構造」がキモなので、分割後の文書は上記と同じ構造を持ちつつ <entries></entries> に含まれる内容が異なっている2つの XML 文書、ということになります。なお、sb ではエントリ情報以外の情報はインポートされないので、分割後の文書内にそれぞれ同じブログタイトル、ブログの説明、ユーザ情報が載っていても問題ありません。

手順

それでは、いよいよ分割に入ります。なお、今までの説明で何をすればいいか分かったという方はいちいち読まなくてもいいと思います。

  1. まずはオリジナルの XML ファイルのバックアップを取っておいて下さい。これで編集に失敗してもすぐに戻れます。

  2. 次に、元のサイトなどを参照して、分割する辺りにある記事の目星をつけて下さい。ぴったり半分にある記事とか、100件目の記事とか、お好きな場所で。

  3. 目星をつけたら、XML ファイルをテキストエディタで開きます。ダブルクリックだとブラウザが開くこともあるので、アプリケーションアイコンへのドラッグ&ドロップや、コンテキストメニューのプログラムから開くなどを使って下さい。

  4. 開いたファイル上を検索して、先ほど目星をつけた記事の場所を探します。そして、その記事を囲んでいる <entry> タグの前に改行を入れて、その行番号を覚えます。行番号が表示されるエディタだと便利です。そのまま一旦保存します。

  5. 先ほど保存したファイルをコピーして2つに増やします。とりあえずこの場では、片方を a.xml、もう片方を b.xml とします。

  6. まずは a.xml を開き、先ほど改行を入れた場所から下に向かって </entries> タグの手前までをばっさり削除します。</entries> タグは一番下の行の、</blog> の前にあります。できたら上書き保存します。

  7. 次に b.xml ファイルを開いて、先ほど改行を入れた場所から上に向かって <entries> タグの直後までをばっさりと削除します。できたら上書き保存します。

ここまででエントリ情報だけが分割されたファイルができました。あとは a.xml 、b.xml の順番に sb にインポートすれば移行完了です。

 分割後のファイルでも同じエラーが出た場合は、さらに分割したり、分割位置をずらすなどして下さい。また、XML ファイルの保存時には文字エンコーディングを変更しないようにして下さい。変更すると、おそらくインポート後の記事が文字化けする結果になると思います。

コメント(日付順)

渡邊 on 2008/05/28 20:50:

初めまして。
xmlの分割で検索して辿りつきました。
記載通りにファイルを作成することが出来ました。
ところが何度、試してみても下記のメッセージが出ます。

ファイルの解析に失敗しました[xml_parser_error: message="No unserialized data available. Use XML_Unserializer::unserialize() first." code=151 mode=return level=notice prefix="XML_Parser: " info=""]

これをどうやって修正したらよいか、皆目検討もつきません。
大変恐縮ですが、教えて�

ふうこ on 2008/05/29 02:10:

☆ 渡邊 さま

そのエラーメッセージは、sb または Serene Bach 以外のシステムにインポートした時のものではないでしょうか。
申し訳ないですが、sb や Serene Bach 以外のことは知識がないのでお答えできません。

コメントする
  • 投稿を受け付けるには、JavaScript を有効にしてください。
  • URI は自動リンクされます。
  • HTMLタグは使えません(実体参照化されます)。