- PR -

XMLのDOMの使い方

1
投稿者投稿内容
ぶんぶん
会議室デビュー日: 2003/12/11
投稿数: 17
お住まい・勤務地: 東京・品川区
投稿日時: 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ということは値が拾えていないのでしょうが、どのようにすべきでしょうか?
どなたかご教授ください。(根本的に間違ってますか?)
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-12-11 23:32
コード:

<XXX>YYY</XXX>


というXMLでは、"YYY"というテキスト要素は、厳密には"XXX"という要素の子要素です。
したがって、まずは"XXX"という要素を取得し、さらにgetChildNodesする必要があります。
また、getElementsByTagNameでは、テキスト要素は取得できないのではないでしょうか。
なぜなら、テキスト要素には要素名が無いので、"*"ではマッチしないからです。

# 間違ってたらすみません。

[ メッセージ編集済み 編集者: おばけ 編集日時 2003-12-11 23:33 ]
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2003-12-12 10:40
ども、ほむらです。
HTMLの知識しかありませんがDOM1だと。。
element2.firstChild.nodeValue
ですね。
ぶんぶん
会議室デビュー日: 2003/12/11
投稿数: 17
お住まい・勤務地: 東京・品川区
投稿日時: 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/11
投稿数: 17
お住まい・勤務地: 東京・品川区
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)