- PR -

DOMでエレメント追加

1
投稿者投稿内容
kanayu
会議室デビュー日: 2001/11/06
投稿数: 15
投稿日時: 2002-05-29 16:52


下記のようなXMLファイルがあるとします。
既存のデータ(ノード)が2件あるのですが、
このXMLに、1件新たにデータ(ノード)
を加えるとすると、どういう処理になるのでしょうか?
(たとえば、UsrIDがmiura,Passwdがkr179を追加しようと
するとなると)
サンプルなど探したのですが、ノード追加というのが
よくわかりません。(ノードを探して、テキストを書き換える
ものはあったのですが。)
参考になるページなどありましたら教えてください。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE SampleLIST SYSTEM "Sample.dtd">
<SampleLIST>
<Sample>
<UsrID>tanaka</UsrID>
<Passwd>ik644</Passwd>
</Sample>
<Sample>
<UsrID>hayashi</UsrID>
<Passwd>dc329</Passwd>
</Sample>
<SampleLIST>
井上孝司
ぬし
会議室デビュー日: 2001/09/08
投稿数: 668
お住まい・勤務地: 東京都
投稿日時: 2002-05-29 20:05
井上です。
うちの Web コンテンツ生成スクリプトで使っている、VBScript のコードを紹介します。
xdoc 要素の先頭のものを選択して IXMLDOMNode オブジェクトになっている変数 XNode にセットし、その下位に "FileName" という要素ノードを追加するものです。

Set XNodeList = XMLDoc2.getElementsByTagName("xdoc")
Set XNode = XNodeList.Item(0)
Set newChild = XMLDoc2.createElement("FileName")
XNode.appendChild (newChild)

createElement だけだとノードフラグメント (っていうんだっけ ?) の状態なので、対象ノードを指定して appendChild メソッドを実行することで、接合を行います。
_________________
www.kojii.net
kanayu
会議室デビュー日: 2001/11/06
投稿数: 15
投稿日時: 2002-05-30 11:22
井上さん、ありがとうございます。
Javaで私は作っているのですが、井上さんが
提示してくださったコードというのは、
エレメント(タグ)を新たに追加、ということなのでしょうか?
私の例ですと、<SampleLIST>
のなかに、
<Sample>
<UsrID>××××</UsrID>
<Passwd>×××××</Passwd>
</Sample>
こうやって、いくつかSampleタグがつらなっていく
感じなんですが、
createElementすると、UsrIDやPasswd以外の
新たなタグを追加するようなことですか?




井上孝司
ぬし
会議室デビュー日: 2001/09/08
投稿数: 668
お住まい・勤務地: 東京都
投稿日時: 2002-05-30 11:23
そうです。私の例ですと、xdoc 要素の下に FileName 要素が増えます。
後は、追加された FileName 要素の text プロパティに文字列をセットすれば、それが FileName 要素のテキストノードになります。

[ メッセージ編集済み 編集者: 井上孝司 編集日時 2002-05-30 11:25 ]
kanayu
会議室デビュー日: 2001/11/06
投稿数: 15
投稿日時: 2002-05-30 12:41
回答、ありがとうございます。

すみません。私の説明が悪かったのだと思うんですが、
私がやりたかったのは、<SampleLIST>
のなかにつらなっている、Sampleタグのデータを
増やしたいということなのです。
つまり、
既存のXMLデータが以下のものだとすると・・・・
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE SampleLIST SYSTEM "Sample.dtd">
<SampleLIST>
<Sample>
<UsrID>tanaka</UsrID>
<Passwd>ik644</Passwd>
</Sample>
<Sample>
<UsrID>hayashi</UsrID>
<Passwd>dc329</Passwd>
</Sample>
<SampleLIST>
<Passwd>×××××</Passwd>
</Sample>

↑この既存XMLにはSampleノードが
2つしかありませんが、以下のように、
Sampleノードを増やしたいのです。
(DBに新規登録するような形。)
XMLをDBみたいに扱いたいということだったのですが。。。
よろしくお願いします。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE SampleLIST SYSTEM "Sample.dtd">
<SampleLIST>
<Sample>
<UsrID>tanaka</UsrID>
<Passwd>ik644</Passwd>
</Sample>
<Sample>
<UsrID>hayashi</UsrID>
<Passwd>dc329</Passwd>
</Sample>
<Sample>
<UsrID>oka</UsrID>
<Passwd>bf444</Passwd>
</Sample>
<SampleLIST>

よねくら
常連さん
会議室デビュー日: 2002/04/24
投稿数: 29
投稿日時: 2002-05-30 13:13
どこかのSampleノードをsampで参照するとして

Element clone = (Element) samp.cloneNode(true);

clone.getElementsByTagName("UsrID").item(0).getFirstChild().setNodeValue("oka");
clone.getElementsByTagName("Passwd").item(0).getFirstChild().nodeValue("bf444");

で、このcloneをすでにあるSampleノードの後にappendChildしてあげれば
よいのではと思います。

doc.getDocumentElement().appendChild(clone);
kanayu
会議室デビュー日: 2001/11/06
投稿数: 15
投稿日時: 2002-05-30 13:42
よねくらさん、ありがとうございます!!!!!!!

できました!!!!!!!!!!!!!!
改めてありがとうございます。
大変お世話になりました。

それで、もしよろしければ、参考になるようなページを
ご存知でしたら教えていただきたいです。

本当に有難うございました。
1

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