③XMLファイルを読み込んでみる
XML(Extensible Markup Language)とは、汎用的なマークアップ言語で、文書やデータの意味をタグを使い構造的に表現したものである。
タグは、独自に作ることができ、HTMLのようにホームページを表現するためのものではない。
XMLに基本構造は、以下のようになります。
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>(ア)ア.XMLデータ(XMLファイル)の宣言
<root>(イ)
<item1>データ1</item1>(ウ)
<item2>データ2(エ)
<subItem1 attr="subData1">サブデータ1</subItem1>(オ)
<subItem2 attr="subData2">サブデータ2</subItem2>(カ)
</item2>(エ)
|
|
</root>(イ)
XMLの基本ルール
・データ構造に合わせて、必要なタグ(要素)を自由に決めれる。
・ルート要素が必ず必要です。
・全要素の入れ子(ネスト)構造が構造化されていること。
・要素は、開始タグから始まり、必ず終了タグで閉じること。
・要素の開始タグ内に、属性を記述できる。
書式:<要素名 属性名="属性値">
・始まりのタグと終わりのタグの間に値を書く。
書式:<要素名>値</要素名>
要素名、属性名の命名規則
・大文字、小文字は区別される。
・使用できる文字は、特殊文字以外の半角英数字、全角英数字、全角ひらがな、全角漢字、全角カタカナ
「_」、「-」使用可能。ただし、「-」で始まる文字列はダメ。また、予約語は使えない。
以下は、住所データをXML化したものです。(サンプルでこの通りにする必要はありません。)
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>XMLを読み込むプログラム(HTML)のファイル名:XMLLoad.html
<addressBooks>
<addressBook>
<name>山田 太郎</name>
<address pref="大阪府">大阪市・・・</address>
<tel>000-000-0000</tel>
</addressBook>
<addressBook>
<name>山田 良子</name>
<address pref="大阪府">大阪市・・・</address>
<tel>000-000-0000</tel>
</addressBook>
<addressBook>
<name>西田 太郎</name>
<address pref="東京都">渋谷区・・・</address>
<tel>000-000-0000</tel>
</addressBook> | |
</addressBooks>
<!DOCTYPE html>XMLを読み込むプログラム(CSS)のファイル名:XMLLoad.css
<html>
<head>
<meta charset="utf-8">
<title>AjaxによるXMLデータの受信</title>
<!-- 外部CSSファイルの読み込み -->
<link rel="stylesheet" type="text/css" href="XMLLoad.css">
<!-- 外部JavaScriptファイルの読み込み -->
<script type="text/JavaScript" src="XMLLoad.js"></script>
</head>
<body>
<table border="0">
<tr>
<td align="center">
<input type="button" value="XML1" id="xml1" data-para="0">
<input type="button" value="XML2" id="xml2" data-para="1">
<input type="button" value="XML3" id="xml3" data-para="2">
</td>
</tr>
<tr>
<td>
<div id="xmlData">リンクをクリックすると住所が表示されます</div>
</td>
</tr>
</table>
</body>
</html>
/* 住所録のリストを表示するための<div>タグに対するCSS */XMLを読み込むプログラム(Javascript)のファイル名:XMLLoad.js
div#xmlData {
border : 1px solid #000000;
font-family : 'MS ゴシック';
font-size : 10pt;
margin : 5px;
padding : 5px;
height : 400px;
width : 500px;
overflow : auto;
}
window.onload=function(){XMLファイルのファイル名(XMLLoad1.xml XMLload2.xml XMLload3.eml)←すべてUTF-8で保存する。
// サーバー上のXML文書のURLを格納するための配列
//読み込むテキストファイルを配列に入れておく。
aryXml = [
"XMLLoad1.xml",
"XMLLoad2.xml",
"xml/XMLLoad3.xml"
];
//イベントの登録
//XML1のエレメントの「click」イベントの登録
document.getElementById("xml1").onclick=function(e){
loadXml(e.target.dataset.para);
}
//XML2のエレメントの「click」イベントの登録
document.getElementById("xml2").onclick=function(e){
loadXml(e.target.dataset.para);
}
//XML3のエレメントの「click」イベントの登録
document.getElementById("xml3").onclick=function(e){
loadXml(e.target.dataset.para);
}
// XMLHTTPオブジェクトを利用するための変数
var xmlhttp = null;
}
// サーバー上のXML文書を読み込むための関数
function loadXml(no) {
// XMLHTTPオブジェクトを作成する
xmlhttp = new XMLHttpRequest();
// サーバーに対しXML文書の読み込みを要求する
xmlhttp.open("GET", aryXml[no], true);
// XML文書の読み込み中に発生するイベントハンドラに「読み込んだXML文書中の住所録のリストを表示するための関数」を指定する
xmlhttp.onload = showXml;
// サーバーに対しリクエストパラメータを送信する(今回はリクエストパラメータなし)
xmlhttp.send("");
}
// 読み込んだXML文書中の住所録のリストを表示するための関数
function showXml() {
// 住所録のリストを表示するための<div>タグを参照するための変数
var xmlData = null;
// 読み込んだXML文書から住所録を参照するための変数
//var nodes1 = null;
//var nodes2 = null;
//var nodes3 = null;
var nodes=[null,null,null];
// 住所録のリストを格納する変数
var list = "";
// XMLデータの読み込みが完了した場合
if (xmlhttp.readyState == 4) {
// 住所録のリストを表示するための<div>タグを参照する
xmlData = document.getElementById("xmlData");
// <div>タグのスクロール位置を左上にする
xmlData.scrollLeft = 0;
xmlData.scrollTop = 0;
// 読み込んだXML文書から住所録を参照する
nodes[0] = xmlhttp.responseXML.getElementsByTagName("name");
nodes[1] = xmlhttp.responseXML.getElementsByTagName("address");
nodes[2] = xmlhttp.responseXML.getElementsByTagName("tel");
// 住所録のリストを作成する
list += "<ul>"
for (i=0 ; i<nodes[0].length; i++) {
list += "<li>" + nodes[0][i].textContent + "</li>";
list += "<li>" + nodes[1][i].getAttribute("pref") + nodes[1][i].textContent + "</li>";
list += "<li>" + nodes[2][i].textContent + "</li>";
}
list += "</ul>"
// 作成した住所録のリストを表示する
xmlData.innerHTML = list;
}
}
//参考URL・・・http://javascriptist.net/ref/element.firstChild.html
// http://jutememo.blogspot.jp/2009/09/javascript-xml.html
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<addressBooks>
<addressBook>
<name>山田 太郎</name>
<address pref="大阪府">大阪市・・・</address>
<tel>000-000-0000</tel>
</addressBook>
<addressBook>
<name>山田 良子</name>
<address pref="大阪府">大阪市・・・</address>
<tel>000-000-0000</tel>
</addressBook>
<addressBook>
<name>西田 太郎</name>
<address pref="東京都">渋谷区・・・</address>
<tel>000-000-0000</tel>
</addressBook>
</addressBooks>