目次へ

3.3. NamedNodeMap

3.1.節では、子ノードの集合等をあらわす、NodeListインタフェースを紹介しました。ノードの集合を扱うインタフェースは、NodeListの他にNamedNodeMapがあります。NamedNodeMapはNodeのgetAttributes()メソッドの戻り値です。ある要素に属する、属性の集合を取得するときに使用します。

NamedNodeMapには、以下のメソッドが用意されています。

メソッド 内容
Node getNamedItem(String name)
指定された名前のノードを取得します。
int getLength() このマップ内のノード数です。
Node item(int index) マップ内の index 番目の項目を返します。

NodeListと異なり、NamedNodeMapはNodeの順番を保持しません。「属性の順番に意味がない」というXMLの仕様を考えれば、当然ともいえます。NamedNodeMapにもitem()メソッドが存在しますが、indexによりどのNodeが返されるかは、特に保障されません。NamedeNodeMapを使用して、属性の値を取得するプログラムの例を示します。以下は、server.xmlの一部です。

1  <Server port="8005" shutdown="SHUTDOWN" debug="0">
2    <Service name="Tomcat-Standalone">
3      <Connector className="org.apache.catalina.connector.http.HttpConnector"
4                 port="8080" minProcessors="5" maxProcessors="75"
5                 enableLookups="true" redirectPort="8443"
6                 acceptCount="10" debug="0" connectionTimeout="60000"/>
...

上記server.xmlから、接続設定を取得するプログラムは以下のようになります。

 ...
17          Element server=document.getDocumentElement();
18
19          Node connector
20              =server.getElementsByTagName("Connector").item(0);
21
22          NamedNodeMap attributes=connector.getAttributes();
23          String attrNames[]=
24              {"className","port","minProcessors",
25               "maxProcessors","enableLookups","debug"};
26
27          for(int i=0;i<attrNames.length;i++){
28              String msg=attrNames[i]+" value:";
29              msg += attributes.getNamedItem(attrNames[i]).getNodeValue();
30              System.out.println(msg);
31          }
・・・

22行目でConnectorノードのgetAttributes()メソッドを実行して、NamedNodeMapを取得しています。このNamedNodeMapには、Connector要素の属性の一覧がふくまれています。29行目で、NamedNodeMapのgetNamedItem()メソッドを実行しています。ここでは、属性の名前を指定してノードを取得しています。さらに、取得したノードのgetNodeValue()メソッドを呼び出すことにより、属性の値を取得し、表示しています。

(実習課題2)

以下のプログラムを作成しなさい。

  • server.xmlファイルを読み込む
  • Connector要素の全属性名を出力する
  • 属性名の一覧を表示した後に、入力プロンプトを表示し、属性名を入力してもらう。
  • 標準入力より入力された属性の値を出力する。

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp