Dom-xml-dom-loading
XML DOM-読み込み
この章では、XML _Loading_および_Parsing_について学習します。
APIによって提供されるインターフェイスを記述するために、W3Cはインターフェイス定義言語(IDL)と呼ばれる抽象言語を使用します。 IDLを使用する利点は、開発者がお気に入りの言語でDOMを使用する方法を学習し、別の言語に簡単に切り替えることができることです。
欠点は、抽象的であるため、IDLをWeb開発者が直接使用できないことです。 プログラミング言語には違いがあるため、抽象インターフェースとその具体的な言語との間のマッピング(またはバインディング)が必要です。 DOMは、Javascript、JScript、Java、C、C ++、PLSQL、Python、Perlなどのプログラミング言語にマッピングされています。
'_以下のセクションと章では、XMLファイルをロードするためのプログラミング言語としてJavascriptを使用します。_
パーサ
_parser_は、ドキュメント(この場合はXMLドキュメント)を分析し、その情報に対して特定の処理を行うように設計されたソフトウェアアプリケーションです。 DOMベースのパーサーのいくつかは、次の表に記載されています-
S.No | Parser & Description |
---|---|
1 |
JAXP Sun MicrosystemのXML解析用Java API(JAXP) |
2 |
XML4J IBMのXML Parser for Java(XML4J) |
3 |
msxml MicrosoftのXMLパーサー(msxml)バージョン2.0はInternet Explorer 5.5に組み込まれています |
4 |
4DOM 4DOMはPythonプログラミング言語のパーサーです |
5 |
XML::DOM
|
6 |
Xerces ApacheのXerces Javaパーサー |
DOMのようなツリーベースのAPIでは、パーサーはXMLファイルを走査し、対応するDOMオブジェクトを作成します。 その後、DOM構造を行き来できます。
XMLの読み込みと解析
XMLドキュメントの読み込み中、XMLコンテンツは2つの形式で提供されます-
- XMLファイルとして直接
- XML文字列として
XMLファイルとしてのコンテンツ
次の例は、XMLコンテンツがXMLファイルとして受信されたときに、AjaxとJavascriptを使用してXML(link:/dom/node.xml [node.xml])データをロードする方法を示しています。 ここで、Ajax関数はxmlファイルのコンテンツを取得し、XML DOMに保存します。 DOMオブジェクトが作成されると、解析されます。
<!DOCTYPE html>
<html>
<body>
<div>
<b>FirstName:</b> <span id = "FirstName"></span><br>
<b>LastName:</b> <span id = "LastName"></span><br>
<b>ContactNo:</b> <span id = "ContactNo"></span><br>
<b>Email:</b> <span id = "Email"></span>
</div>
<script>
//if browser supports XMLHttpRequest
if (window.XMLHttpRequest) {//Create an instance of XMLHttpRequest object.
code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest();
} else {//code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
//sets and sends the request for calling "node.xml"
xmlhttp.open("GET","/dom/node.xml",false);
xmlhttp.send();
//sets and returns the content as XML DOM
xmlDoc = xmlhttp.responseXML;
//parsing the DOM object
document.getElementById("FirstName").innerHTML =
xmlDoc.getElementsByTagName("FirstName")[0].childNodes[0].nodeValue;
document.getElementById("LastName").innerHTML =
xmlDoc.getElementsByTagName("LastName")[0].childNodes[0].nodeValue;
document.getElementById("ContactNo").innerHTML =
xmlDoc.getElementsByTagName("ContactNo")[0].childNodes[0].nodeValue;
document.getElementById("Email").innerHTML =
xmlDoc.getElementsByTagName("Email")[0].childNodes[0].nodeValue;
</script>
</body>
</html>
node.xml
<Company>
<Employee category = "Technical" id = "firstelement">
<FirstName>Tanmay</FirstName>
<LastName>Patil</LastName>
<ContactNo>1234567890</ContactNo>
<Email>[email protected]</Email>
</Employee>
<Employee category = "Non-Technical">
<FirstName>Taniya</FirstName>
<LastName>Mishra</LastName>
<ContactNo>1234667898</ContactNo>
<Email>[email protected]</Email>
</Employee>
<Employee category = "Management">
<FirstName>Tanisha</FirstName>
<LastName>Sharma</LastName>
<ContactNo>1234562350</ContactNo>
<Email>[email protected]</Email>
</Employee>
</Company>
コードの詳細のほとんどは、スクリプトコードにあります。
- Internet Explorerは_ActiveXObject( "Microsoft.XMLHTTP")_を使用してXMLHttpRequestオブジェクトのインスタンスを作成し、他のブラウザーは_XMLHttpRequest()_メソッドを使用します。
- _responseXML_は、XMLコンテンツをXML DOMで直接変換します。
- XMLコンテンツがJavaScript XML DOMに変換されると、JS DOMのメソッドとプロパティを使用して任意のXML要素にアクセスできます。 childNodes _、 nodeValue_などのDOMプロパティと、getElementsById(ID)、getElementsByTagName(tags_name)などのDOMメソッドを使用しました。
実行
このファイルをloadingexamplelとして保存し、ブラウザで開きます。 次の出力が表示されます-
XML文字列としてのコンテンツ
次の例は、XMLコンテンツがXMLファイルとして受信されたときにAjaxとJavascriptを使用してXMLデータをロードする方法を示しています。 ここで、Ajax関数は、xmlファイルのコンテンツを取得し、XML DOMに保存します。 DOMオブジェクトが作成されると、解析されます。
<!DOCTYPE html>
<html>
<head>
<script>
//loads the xml string in a dom object
function loadXMLString(t) {//for non IE browsers
if (window.DOMParser) {
//create an instance for xml dom object parser = new DOMParser();
xmlDoc = parser.parseFromString(t,"text/xml");
}
//code for IE
else {//create an instance for xml dom object
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.loadXML(t);
}
return xmlDoc;
}
</script>
</head>
<body>
<script>
//a variable with the string
var text = "<Employee>";
text = text+"<FirstName>Tanmay</FirstName>";
text = text+"<LastName>Patil</LastName>";
text = text+"<ContactNo>1234567890</ContactNo>";
text = text+"<Email>[email protected]</Email>";
text = text+"</Employee>";
//calls the loadXMLString() with "text" function and store the xml dom in a variable
var xmlDoc = loadXMLString(text);
//parsing the DOM object
y = xmlDoc.documentElement.childNodes;
for (i = 0;i<y.length;i++) {
document.write(y[i].childNodes[0].nodeValue);
document.write("<br>");
}
</script>
</body>
</html>
コードの詳細のほとんどは、スクリプトコードにあります。
- Internet Explorerは_ActiveXObject( "Microsoft.XMLDOM")_を使用してXMLデータをDOMオブジェクトにロードし、他のブラウザーは_DOMParser()_関数と_parseFromString(text、 'text/xml')_メソッドを使用します。
- 変数_text_には、XMLコンテンツを含む文字列が含まれます。
- XMLコンテンツがJavaScript XML DOMに変換されると、JS DOMのメソッドとプロパティを使用して任意のXML要素にアクセスできます。 childNodes _、 nodeValue_などのDOMプロパティを使用しました。
実行
このファイルをloadingexamplelとして保存し、ブラウザで開きます。 次の出力が表示されます-
XMLコンテンツがJavaScript XML DOMに変換される方法を確認したので、XML DOMメソッドを使用して任意のXML要素にアクセスできるようになりました。