• ベストアンサー

replaceChildメソッドについて

XMLの扱いがわからなくて困っています。 javaでXMLのノードを変える、例えば、 jspの画面で要素ノードとテキスト名(要素ノードの内容)を入力して 送信ボタンを押したら、要素ノードでノード検索をしてそのテキスト名を 変更するという処理をする場合、replaceChildメソッドを使うのかと 思ったんですが、replaceChildメソッドだと、「既存のノード」しか 置き換えれなくて文字列が指定できません。 この場合、文字列をノードに変換するメソッドがあるのか、それとも 他に方法があるのか教えていただけないでしょうか。 お願いします。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jo-ji
  • ベストアンサー率72% (26/36)
回答No.2

回答というよりもアドバイスですが、おそらく > replaceChildメソッドだと、「既存のノード」しか > 置き換えれなくて文字列が指定できません。 というところが勘違いの元で、要素の内容のテキストは、その要素ノードの子供にあたるテキストノードとして(DOMでは)表されます。試しに、テキストだけを内容とする要素ノードに対してgetFirstChild()を呼び出してみると、そのテキストノードが得られるはずです。 したがって、No.1の方が回答なさっているようにそのテキストノードを別のテキストノードで置き換えてもよいですし、replaceChildにこだわらなければ、そのテキストノードに対して直接CharacterData#setData()を使ってテキストの文字列だけ書き換えてもよいです。 この手の話は、XML自体の仕様というよりはDOMの仕様なので、参考URLなどでDOMの概念的なことだけでも抑えておくことをお奨めします。

参考URL:
http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113
bibi5555
質問者

お礼

replaceChildはNodeを置き換えるもので、例えばテキストノードを 置き換えたければノードを用意して、そこにテキストノードをセットすれば できるんですね。 会社にある本は古くて、あまり詳しいことが載っていないんですよね、 こういう基本的なことができないと致命的なので、しっかり調べようと思います。 setDataメソッドも教えていただいて、ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

Document#createTextNode() で、テキストノードを作って、Node#replaceChild() で置き換えます。 # ということではない?

bibi5555
質問者

お礼

StringをTextNodeする方法がわからなかったんですが、 おかげで置き換え処理ができました。 テキストノードをつくって、それをNodeにセットして、 最後にルート要素に加えれば良いんですね。 とても助かりました、ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A