ファイルメーカーのXMLデータを表示する

 File Maker (ファイルメーカー) はデータベースソフトです(ファイルメーカー社のページ)。ここではFile Maker Pro 7で出力したXMLデータを表示してみます。Excelの場合と異なりFile Maker Pro 7が出力するXML形式のファイルにはタグの間に改行や空白が一切入っていません。このため、Internet Explorer 6とFirefox, Safari, Operaとの違いを気にせずにスクリプトを作成できます。(実際に使用するデータと元データを参照。Safariで文字化けを起こさないようにするためBOM (Byte Order Mark) を付けてあります)
 File Maker Pro 7のXMLデータのドキュメントツリーは以下のようになっています。

ROW
 ┗COL
  ┗DATA

 getElemntByTagNameでROWタグの情報を取得します。ROWタグの最初のノードがCOLタグになります。ROWタグオブジェクトデータがrowObjに入っているのであればrowObj.childNodes[0]でCOLタグを参照できます。COLタグの最初のノードがDATAタグになります。これはrowObj.childNodes[0].childNodes[0]になります。DATAタグの間に抽出するデータが入っています。このデータを参照するにはrowObj.childNodes[0].childNodes[0].childNodes[0].nodeValueとなります。ROWタグ内のデータがデータベースの1レコードに該当します。あとは、参照するノードの位置を変えてデータを読み出します。

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=shift_jis">
<title>ファイルメーカーのXMLデータを表示する</title>
<script type="text/javascript" src="xmlhttp.js"></script>
<script type="text/javascript"><!--
function loadDataFile(fName)
{
httpObj = createXMLHttpRequest(displayData);
if (httpObj)
{
httpObj.open("GET",fName,true);
httpObj.send(null);
}
}
function displayData()
{
if ((httpObj.readyState == 4) && (httpObj.status == 200))
{
$("result").innerHTML = parseFM(httpObj.responseXML);
}
}
// ファイルメーカーのXMLデータを解析して表示
function parseFM(fmpXML)
{
var rowObj = fmpXML.getElementsByTagName("ROW");
var result = "<table border='1' bordercolor='black'>";
for (h=0; h<rowObj.length; h++)
{
result += "<tr>";
colObj = rowObj[h].childNodes;
for (w=0; w<colObj.length; w++)
{
var n = colObj[w].childNodes[0].childNodes[0].nodeValue;
result += "<td>"+n+"</td>";
}
result += "</tr>";
}
result += "</table>";
return result;
}
// --></script>
</head>
<body>
<h1>ファイルメーカーのXMLデータを表示する</h1>
<p>ファイルメーカーのXMLデータを読み込み表示します</p>
<form name="ajaxForm">
<input type="button" value="sample.xmlを読み込み" onClick="loadDataFile('sample.xml')"><br>
</form>
<div id="result"></div>
</body>
</html>

 File Maker Pro 7のXMLデータを取り扱うのは簡単です。これによりデータベースのデータを再利用することができるでしょう。次項ではJSONのデータを表示してみます。

[第三章 6:JSONのデータを表示するへ]
[目次へ]

(2006.1.6)