TOP XML & CGI 目次

XMLでデータベース
XMLデータを配列に入れる際の問題…(私の約束:1データは1改行で区切る)
以下のようなXML文書(dtb.xml)を
<?xml version="1.0" encoding="Shift_JIS"?><?xml-stylesheet type="text/xsl" href="dtb.xsl"?>
<新聞雑誌記事><記事>あああ</記事>
<記事 タイトル="みっこサーバー" サブタイトル="サブテスト" 文献="手すとん" 人物="池田" 年月日="20040531" 連続="" 画像="" 横サイズ="" 縦サイズ="" リンク名="" リンク="" コメント="">本日は晴天なり</記事></新聞雑誌記事>
test_open.cgiというプログラムを作って
#!/usr/bin/perl

#HTML文を出力するための宣言
print "Content-type: text/html\n\n";

open(IN,"dtb.xml");
@data=<IN>;
close(IN);

$n=0;
foreach (@data){
print "\$data\[$n\]\="."$data[$n]<BR>\n";
$n++;
}

exit;
実行すると配列@dataには以下のように収納されます。
ところが以下のような実際のXMLデータを使って
  江戸に出ていたものの家のために離縁してまで帰郷、さらには大不況で困窮したため屋敷を留守にし、大間々の質屋に入って再起をはかったのが駒雄の父・彦部四郎で、歴史の家存続の苦労と、それにもかかわらず家宝を秘蔵し切った執念が、今日の「歴史の家」なのだ。</記事></桐生><科学技術><記事 タイトル="地学" サブタイトル="" 文献="Cosmos" 人物="" 年月日="19640900" コメント="メモ" 連続="">・花崗岩の平均比重はおよそ2.7である。&lt;br/&gt;
 火成岩のうちでは比重が小さい。&lt;br/&gt;
・フズリナの絶滅した時期は今からおよそ2×10^8年前、古成代末期。&lt;br/&gt;
・海水は1kgについて平均35gの塩類を含む(35パーミルの塩類)&lt;br/&gt;
・地球上、海洋と陸地の比は7:3である。&lt;br/&gt;
・マントルまで2000km&lt;br/&gt;
・石英の硬度は7である。窓ガラス5〜6。鋼玉9&lt;br/&gt;
・太陽の起潮力は月の1/2である。&lt;br/&gt;
・海水中に含まれる塩類で最も多いのはNaCl&lt;br/&gt;
・深さ16kmまでの地殻の化学成分農地最も多いものは</記事>
<記事 タイトル="ついに得られた月面の近接写真" サブタイトル="レンジャー7号 最初の月面近接撮影" 文献="Cosmos" 人物="" 年月日="19640900" コメント="天文学" 連続="" 画像="img/renger07.gif" 横サイズ="" 縦サイズ="">1964年7月31日レンジャー7号最初の月面近接撮影。7月28日ケープケネディ基地より打ち上げ。&lt;br/&gt;
雲の海、誤差12〜16km&lt;br/&gt;
6つのテレビカメラで月面突入0.5秒前まで撮影(18m四方の写真)&lt;br/&gt;
ウィリアム・H・ピカリング博士が指揮。
1970年頃まで月面に人類を送る。</記事><記事 タイトル="新天体のナゾ" サブタイトル="銀河系外の天体" 文献="Cosmos" 人物="" 年月日="19640900" コメント="天文学" 連続="" 画像="" 横サイズ="" 縦サイズ="">電波望遠鏡…銀河系外にある天体の発見 3C−273 20億光年&lt;br/&gt;
準星(Quasi-stellar object)&lt;br/&gt;
水素核融合の50倍以上のエネルギー効率&lt;br/&gt;
J・W・モファット/L・ゴールド&lt;br/&gt;
J・W・Debye…Debye free energy</記事>
<記事 タイトル="科学者を悩まず難問「時間とは」" サブタイトル="読書雑感" 文献="週刊新潮" 人物="(夷)" 年月日="19970501" コメント="" 連続="" 画像="" 横サイズ="" 縦サイズ=""> 考えれば考えるほどわからなくなってくるもの、その代表が時間である。『告白』出有名な思想家アウグスティヌスは、時間とは何か、と問われて、『だれも尋ねなければ、私は知っている。しかし、答えよと求められるときには、私は知らない』と答えたという。たしかに、自明のものほど説明しにくい。&lt;br/&gt;

読み込むと、ひとつの記事が別の配列に別れてしまいました。これでは改行で自動的に配列に入れるという方法は有効ではありません。
/(-_-)\ コマッタァ・・・
$data[45]=  江戸に出ていたものの家のために離縁してまで帰郷、さらには大不況で困窮したため屋敷を留守にし、大間々の質屋に入って再起をはかったのが駒雄の父・彦部四郎で、歴史の家存続の苦労と、それにもかかわらず家宝を秘蔵し切った執念が、今日の「歴史の家」なのだ。<科学技術><記事 タイトル="地学" サブタイトル="" 文献="Cosmos" 人物="" 年月日="19640900" コメント="メモ" 連続="">・花崗岩の平均比重はおよそ2.7である。<br/>
$data[46]= 火成岩のうちでは比重が小さい。<br/>
$data[47]=・フズリナの絶滅した時期は今からおよそ2×10^8年前、古成代末期。<br/>
$data[48]=・海水は1kgについて平均35gの塩類を含む(35パーミルの塩類)<br/>
$data[49]=・地球上、海洋と陸地の比は7:3である。<br/>
$data[50]=・マントルまで2000km<br/>
$data[51]=・石英の硬度は7である。窓ガラス5〜6。鋼玉9<br/>
$data[52]=・太陽の起潮力は月の1/2である。<br/>
$data[53]=・海水中に含まれる塩類で最も多いのはNaCl<br/>
$data[54]=・深さ16kmまでの地殻の化学成分農地最も多いものは
<記事 タイトル="ついに得られた月面の近接写真" サブタイトル="レンジャー7号 最初の月面近接撮影" 文献="Cosmos" 人物="" 年月日="19640900" コメント="天文学" 連続="" 画像="img/renger07.gif" 横サイズ="" 縦サイズ="">1964年7月31日レンジャー7号最初の月面近接撮影。7月28日ケープケネディ基地より打ち上げ。<br/>
$data[55]=雲の海、誤差12〜16km<br/>
$data[56]=6つのテレビカメラで月面突入0.5秒前まで撮影(18m四方の写真)<br/>
$data[57]=ウィリアム・H・ピカリング博士が指揮。
$data[58]=1970年頃まで月面に人類を送る。<記事 タイトル="新天体のナゾ" サブタイトル="銀河系外の天体" 文献="Cosmos" 人物="" 年月日="19640900" コメント="天文学" 連続="" 画像="" 横サイズ="" 縦サイズ="">電波望遠鏡…銀河系外にある天体の発見 3C−273 20億光年<br/>
$data[59]=準星(Quasi-stellar object)<br/>
$data[60]=水素核融合の50倍以上のエネルギー効率<br/>
$data[61]=J・W・モファット/L・ゴールド<br/>
$data[62]=J・W・Debye…Debye free energy
<記事 タイトル="科学者を悩まず難問「時間とは」" サブタイトル="読書雑感" 文献="週刊新潮" 人物="(夷)" 年月日="19970501" コメント="" 連続="" 画像="" 横サイズ="" 縦サイズ=""> 考えれば考えるほどわからなくなってくるもの、その代表が時間である。『告白』出有名な思想家アウグスティヌスは、時間とは何か、と問われて、『だれも尋ねなければ、私は知っている。しかし、答えよと求められるときには、私は知らない』と答えたという。たしかに、自明のものほど説明しにくい。<br/>
結論は、
1.XMLデータをCGIプログラムで使う場合は既成のデータをそのまま用いないこと。
2.1データは1改行で区切ること。
3.配列の0番はXML言語の宣言文なのでデータとして拾わないこと。