XMLチュートリアル

XMLホーム XMLの紹介 XML使用方法 XMLツリー XML構文 XML要素 XML属性 XML名前空間 XML表示 XML HttpRequest XMLパーサー XML DOM XML XPath XML XSLT XML XQuery XML XLink XMLバリデーター XML DTD XMLスキーマ XMLサーバー XMLの例 XMLクイズ XML証明書

XML AJAX

AJAXの紹介 AJAX XMLHttp AJAXリクエスト AJAX応答 AJAXXMLファイル AJAX PHP AJAX ASP AJAXデータベース AJAXアプリケーション AJAXの例

XML DOM

DOMの紹介 DOMノード DOMアクセス DOMノード情報 DOMノードリスト DOMトラバース DOMナビゲーション DOMは値を取得します DOM変更ノード DOM削除ノード DOM置換ノード DOM作成ノード DOM追加ノード DOMクローンノード DOMの例

XPathチュートリアル

XPathの概要 XPathノード XPath構文 XPath軸 XPath演算子 XPathの例

XSLTチュートリアル

XSLTの紹介 XSL言語 XSLT変換 XSLT <テンプレート> XSLT <値> XSLT <for-each> XSLT <ソート> XSLT <if> XSLT <選択> XSLT適用 クライアント上のXSLT サーバー上のXSLT XSLT Edit XML XSLTの例

XQueryチュートリアル

XQueryの紹介 XQueryの例 XQuery FLWOR XQuery HTML XQueryの用語 XQuery構文 XQuery追加 XQuery Select XQuery関数

XML DTD

DTDの紹介 DTDビルディングブロック DTD要素 DTD属性 DTD要素と属性 DTDエンティティ DTDの例

XSDスキーマ

XSDの概要 XSDハウツー XSD <スキーマ> XSD要素 XSD属性 XSDの制限

XSDコンプレックス

XSD要素 XSDが空です XSD要素のみ XSDテキストのみ XSD混合 XSDインジケーター XSD <任意> XSD <anyAttribute> XSD置換 XSDの例

XSDデータ

XSD文字列 XSD日付 XSD数値 XSDその他 XSDリファレンス

Webサービス

XMLサービス XML WSDL XML SOAP XML RDF XML RSS

参考文献

DOMノードタイプ DOMノード DOM NodeList DOM NamedNodeMap DOMドキュメント DOM要素 DOM属性 DOMテキスト DOM CDATA DOMコメント DOM XMLHttpRequest DOMパーサー XSLT要素 XSLT / XPath関数

XMLDOMトラバースノードツリー


トラバースとは、ノードツリーをループまたは通過することを意味します。


ノードツリーのトラバース

たとえば、XMLドキュメントをループしたい場合がよくあります。たとえば、各要素の値を抽出する場合です。

これは「ノードツリーのトラバース」と呼ばれます

以下の例は、<book>のすべての子ノードをループし、それらの名前と値を表示します。

<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var x, i ,xmlDoc;
var txt = "";
var text = "<book>" +
"<title>Everyday Italian</title>" +
"<author>Giada De Laurentiis</author>" +
"<year>2005</year>" +
"</book>";

parser = new DOMParser();
xmlDoc = parser.parseFromString(text,"text/xml");

// documentElement always represents the root node
x = xmlDoc.documentElement.childNodes;
for (i = 0; i < x.length ;i++) {
    txt += x[i].nodeName + ": " + x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("demo").innerHTML = txt;
</script>

</body>
</html>

出力:

title: Everyday Italian
author: Giada De Laurentiis
year: 2005

説明された例:

  1. XML文字列をxmlDocにロードします
  2. ルート要素の子ノードを取得します
  3. 子ノードごとに、テキストノードのノード名とノード値を出力します


DOM解析におけるブラウザの違い

最新のブラウザはすべて、W3CDOM仕様をサポートしています。

ただし、ブラウザ間にはいくつかの違いがあります。重要な違いの1つは次のとおりです。

  • 空白と新しい行を処理する方法

DOM-空白と新しい行

XMLには、ノード間に改行または空白文字が含まれていることがよくあります。これは、ドキュメントがメモ帳などの単純なエディタで編集されている場合によくあります。

次の例(メモ帳で編集)には、各行と各子ノードの前の2つのスペースの間にCR / LF(改行)が含まれています。

<book>
  <title>Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>30.00</price>
</book>

Internet Explorer 9以前では、空の空白や新しい行はテキストノードとして扱われませんが、他のブラウザでは扱われます。

次の例では、( books.xmlの)ルート要素が持つ子ノードの数を出力します。IE9以前は4つの子ノードを出力しますが、IE10以降のバージョン、およびその他のブラウザーは9つの子ノードを出力します。

function myFunction(xml) {
var xmlDoc = xml.responseXML;
    x = xmlDoc.documentElement.childNodes;
    document.getElementById("demo").innerHTML =
    "Number of child nodes: " + x.length;
}

PCDATA-解析された文字データ

XMLパーサーは通常、XMLドキュメント内のすべてのテキストを解析します。

XML要素が解析されると、XMLタグ間のテキストも解析されます。

<message>This text is also parsed</message>

この例のように、XML要素には他の要素を含めることができるため、パーサーはこれを行います。ここで、<name>要素には他の2つの要素(最初と最後)が含まれます。

<name><first>Bill</first><last>Gates</last></name>

パーサーはそれを次のようなサブ要素に分割します。

<name>
  <first>Bill</first>
  <last>Gates</last>
</name>

解析済み文字データ(PCDATA)は、XMLパーサーによって解析されるテキストデータについて使用される用語です。


CDATA-(未解析)文字データ

CDATAという用語は、XMLパーサーによって解析されるべきではないテキストデータについて使用されます。

「<」や「&」などの文字は、XML要素では無効です。

「<」は、パーサーが新しい要素の開始として解釈するため、エラーを生成します。

「&」は、パーサーが文字エンティティの開始として解釈するため、エラーを生成します。

JavaScriptコードなどの一部のテキストには、多くの「<」または「&」文字が含まれています。エラーを回避するために、スクリプトコードをCDATAとして定義できます。

CDATAセクション内のすべては、パーサーによって無視されます。

CDATAセクションは " <![CDATA [ "で始まり、 " ]]> "で終わります:

<script>
<![CDATA[
function matchwo(a,b) {
    if (a < b && a < 0) {
        return 1;
    } else {
        return 0;
    }
}
]]>
</script>

上記の例では、CDATAセクション内のすべてがパーサーによって無視されます。

CDATAセクションに関する注記:

CDATAセクションに文字列 "]]>"を含めることはできません。ネストされたCDATAセクションは許可されていません。

CDATAセクションの終わりを示す「]]>」には、スペースや改行を含めることはできません。