ノードの情報を取得する
ルートのノード型を取得するには、nodeTypesStringプロパティあるいはnodeTypeプロパティを使用します。この2つのプロパティは、取得したノード型の表し方が異なります。nodeTypeStringプロパティは「ノードの文字列」で、nodeTypeプロパティは「ノード型に対応した数値」でノード型を表します。
nodeTypeプロパティで取得される数値に対応するノード型 数値 ノード型 1 ELEMENT 2 ATTRIBUTE 3 TEXT 4 CDATA_SECTION 5 ENTITY_REFFERENCE 6 ENTITY 7 PROCESSING_INSTRUCTION 8 COMMENT 9 DOCUMENT 10 DOCUMENT_TYPE 11 DOCUMENT_FRAGMENT 12 NOTATION ・ノードの型を文字列で表す(nodeTypeStringプロパティ)
・ノードの型を数値で表す(nodeTypeプロパティ)実際にnodeTypeStringプロパティとnodeTypeプロパティを使用してルートのノード型の情報を取得するスクリプトを記述したものが、リスト2-4です。
リスト2-4 DOM1-2.html ---ノード型の情報を取得するスクリプトの追加
このJavaScriptの追加プログラムを「DOM1-1.html」ファイルのSCRIPTタグの部分に入力して「DOM1-2.html」として保存します。そして、「DOM1-2.html」ファイルを読み込んでルートのノード型の文字列やノード型を示す数値(上表)を表示することができます。
図2-6 DOM1-2.htmlの実行結果
commentノードに子ノードが存在するかどうかをDOMによって取得することができまうs。このときにはhasChildNodesメソッドを呼び出します。hasChildNodesメソッドを呼び出すと、ノードに子ノードが存在する場合にはtrueを、存在しないときにはfalseを返します。
■ 子ノードが存在するかどうかを調べる
子ノードの数を取得するには、どうすればよいのでしょうか。
これには、「子ノードを含むノードの一覧(ノードリスト)」を示すchildnodesプロパティに続き、lengthプロパティを使用します。lengthプロパティは、「ノードリスト内部の項目数」を示しています。■ 子ノードを取得する
図2-7 子ノードの存在とノード数を調べる
リスト2-5に、「ルートノードに子ノードが存在するかどうかを調べるソースコード」と「子ノードの数を主とkするソースコード」を示します。
リスト2-5 DOM1-3.html ---ルートノードの子ノードの存在生むと数を取得するスクリプトの追加
このJavaScriptのついかプログラムを「DOM1-2.html」ファイルのSCRIPTタグの部分に入力して、「DOM1-3.html」として保存します。そして、「DOM1-3.html」ファイルを開くと、IEが「kensaDOM1.xml」ファイルを読み込んで子ノードの有無や子ノード数を表示することができます。図2-8にその実行結果を示します。
図2-8 DOM1-3.htmlの実行結果
上のパートで実装したdocumentElement.childNodes.lengthによって、子ノードの数を表示することができました。ここでは、子ノードのテキスト(要素の内容)を表示してみます。
個々のノードにアクセスするには、documentElement.childNodeの後にitemメソッドを追加します。temメソッドを呼び出すときには図2-9のようにitem()の中にノードのインデックスを設定します。最後に、「テキストを取得することを示すtextプロパティもしくはnodevalueプロパティを指定」します。
■ 子ノードのノードテキストを取得する
図2-9 nodeValueプロパティを使ったノードテキストの取得
itemメソッドとtextプロパティあるいはodeValueプロパティを指定してノードテキストを取得します。たとえば、図2-9のような構造を持つDOMリーでノードテキストの取得素をしてみます。最初のノードであるtitleのテキスト、「患者A X線」を取得するには、document.Element.childNodes.item(0).textと指定します。また、documentElement.childNodes.item(5).textとすると、最後のノードのテキストである「右下肺野に直径2.5cmの薄い輪状陰影があり、その中の肺門側の下部に凸凹のある腫瘤状陰影がある」を取得することができます。
textプロパティの代わりにdeValueプロパティでも同様の結果を得ることができます。Valueプロパティを用いた場合の、6つの子ノード(ノード1〜6)のノードテキスト取得の指定を次に示します。右端に示してあるのは、この指定によって取得できるノードテキストです。・ノード1:document.Element.childNodes.item(0).nodeVlue・・・・患者A X線
・ノード2:document.Element.childNodes.item(1).nodeVlue・・・・検査技師 N
・ノード3:document.Element.childNodes.item(2).nodeVlue・・・・2007/08/01
・ノード4:document.Element.childNodes.item(3).nodeVlue・・・・Seikei-0801
・ノード5:document.Element.childNodes.item(4).nodeVlue・・・・n-ken@hosp.gr
・ノード6:document.Element.childNodes.item(5).nodeVlue・・・・右下肺野に直径2.5cmの薄い輪状陰影があり、その中の肺門側の下部に凸凹のある腫瘤状陰影があるtextパティの代わりにnodeNameプロパティを指定すると、ノード名を取得することができます。
図2-9のDOMツリーを例にとり、6つの子ノード(ノード1〜6)の各ノード名を取得してみます。指定方法と取得できるノード名(右端)は、次のようになります。・ノード1:document.Element.childNodes.item(0).nodeName・・・・title
・ノード2:document.Element.childNodes.item(1).nodeName・・・・name
・ノード3:document.Element.childNodes.item(2).nodeName・・・・date
・ノード4:document.Element.childNodes.item(3).nodeName・・・・home
・ノード5:document.Element.childNodes.item(4).nodeName・・・・mail
・ノード6:document.Element.childNodes.item(5).nodeName・・・・option■ 子ノードのノード名を取得する
では、itemメソッド、およびtextとNameプロパティを組み合わせて、6つの子ノードのテキストとノード名を表示するスクリプトを「DOM1-3.html」ファイルのSCRIPTタグの部分に追加してみます。そして、DOM1-4.htmlとして保存します。
リスト2-6 DOM1-4.html --- ノードテキストとノード名を表示するスクリプトの追加
DOM4-1.htmlファイルをダブルクリックすると、IEがkensaDOM1.xmlファイルを読み込んで子ノードの要素の内容と要素名を表示することができます。
図2-10 「DOM1-4.html」の実行結果
これまでの説明でJavaScriptを使って、ルートノードとその子ノードの様々な情報を取得し、表示することができるようになりました。まとめとして「DOM1-4.html」の全ソースリストを示します。
リスト2-7 「DOM1-4.html」の全ソースリスト