- - PR -
XMLのDOMの使い方
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-12-11 23:14
はじめまして。おらあ。と申します。
以下のxmlをDOMで処理しようとしても"<A01>","<A02>","<A03>","<A04>"は 取得できますが、その後の"1","2","3",""は取得できません。 <?xml version="1.0" encoding="Shift_JIS"?> <root> <A01>1</A01> <A02>2</A02> <A03>3</A03> <A04/> </root> ソースは以下の感じです。 Document doc = builder.parse("SampleDOM2.xml"); Element element1 = doc.getDocumentElement(); NodeList nodelist1 = element1.getElementsByTagName("*"); for(int cnt=0 ; cnt < nodelist1.getLength() ;cnt++){ Element element2 = (Element)nodelist1.item(cnt); System.out.println(element2.getTagName()); System.out.println(element2.getNodeValue()); } ------実行結果です A01 null A02 null A03 null A04 null nullということは値が拾えていないのでしょうが、どのようにすべきでしょうか? どなたかご教授ください。(根本的に間違ってますか?) | ||||
|
投稿日時: 2003-12-11 23:32
というXMLでは、"YYY"というテキスト要素は、厳密には"XXX"という要素の子要素です。 したがって、まずは"XXX"という要素を取得し、さらにgetChildNodesする必要があります。 また、getElementsByTagNameでは、テキスト要素は取得できないのではないでしょうか。 なぜなら、テキスト要素には要素名が無いので、"*"ではマッチしないからです。 # 間違ってたらすみません。 [ メッセージ編集済み 編集者: おばけ 編集日時 2003-12-11 23:33 ] | ||||
|
投稿日時: 2003-12-12 10:40
ども、ほむらです。
HTMLの知識しかありませんがDOM1だと。。 element2.firstChild.nodeValue ですね。 | ||||
|
投稿日時: 2003-12-12 11:14
おばけさん、ありがとうございます。
結局以下のソースで希望通りの値を取得できました。 どうやら“理解不足”が一番の原因でした。 Document doc = builder.parse("SampleDOM2.xml"); Element element1 = doc.getDocumentElement(); NodeList nodelist1 = element1.getElementsByTagName("*"); for(int cnt=0 ; cnt < nodelist1.getLength() ;cnt++){ Element element2 = (Element)nodelist1.item(cnt); NodeList nodelist2 = element2.getChildNodes(); Node node1 = nodelist2.item(0); System.out.println(element2.getTagName()); System.out.println(node1.getNodeValue()); } | ||||
|
投稿日時: 2003-12-12 11:32
ほむらさん、ありがとうございます。
当初getChildNodes()で取得しましたが、 おっしゃる通りgetFirstChild()でも対応できる様です。 今回のxmlの構造であれば十分取得できる、ということですね。 以下の通り変更してみました。 //NodeList nodelist2 = element2.getChildNodes(); //Node node1 = nodelist2.item(0); //System.out.println(node1.getNodeValue()); System.out.println(element2.getFirstChild().getNodeValue()); |
1