• ベストアンサー

StringからDOMのElementオブジェクトを作成したい

Stringから、DOMのDocumentオブジェクトを作成する場合は 以下のようにしますよね。 DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new InputSource(new StringReader("<a/>"))); DocumentではなくElementオブジェクトを作成したいのですが、 どのようにすればよいでしょうか?そもそも、Elementオブジェクト を作成することは可能なんでしょうか? DOMでなく、JDOMでもよいので作成する方法を教えていただけないでしょうか。

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

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

Document の内容を、別の Document に append するんですね。 多分、owner が違うから、ですかね(このあたりは、DOM の実装に依存するはず)。私が試した環境では Exception in thread "main" org.apache.crimson.tree.DomEx: WRONG_DOCUMENT_ERR: 指定されたノードはこのドキュメントに属しません。 と、怒られました。 こんな感じ(↓)でいかが? DocumentBuilder builder = factory.newDocumentBuilder(); Document d1 = builder.parse(new InputSource(new StringReader("<aaa />")) ); Document d2 = builder.parse(new InputSource(new StringReader("<bbb />")) ); Node n = d1.importNode(d2.getDocumentElement(), true); d1.getDocumentElement().appendChild(n); # 今回は、動作確認までしました (J2SDK 1.4.0) > a-kumaさんには以前にも何度かお世話になりました。 回答の不正確さから、察することができるでしょうが、私も XML は初心者です。 仕事で使うことになるので、勉強中。ns18 さんの質問は、練習問題として ありがたく使わせてもらってます。 実は、この質問に該当する内容も、仕事で要求されている内容だったりします (^^;

ns18
質問者

お礼

返事が遅れて申し訳ありません。m(_ _)m > 回答の不正確さから、察することができるでしょうが、私も XML は初心者です。 a-kumaさんも初心者なのですか?いつも的確な回答を頂けるので、 かなりの上級者かと思いましたよ。 今回もまたa-kumaさんにお世話になりました。 上記の方法で期待通りの処理を行うことができました。 もしまた質問したときには回答頂けると幸いです。 私も勉強して質問に回答できるようになりたいです。 ありがとうございました。m(_ _)m

その他の回答 (2)

  • Harry_
  • ベストアンサー率55% (36/65)
回答No.2

> 上記の方法で取得したElementオブジェクトをappendChild()で設定しようと > してもエラーになってしまいます(appendChild()の使い方がちがうのでしょうか?)。 それは Document#getDocumentElement で取得できるのがルート要素で、 ルート要素にルート要素、つまり自分自身をアペンドしようとしているから、 ではないですか。 新しい要素は、Document#createElement で生成して、 ドキュメント等、他のノードに appendChild します。

ns18
質問者

お礼

Harry_の方法で試してみましたが、エラーになってしまいましたよ。 私のやり方がまずかったのでしょうか。 何はともあれ回答頂きありがとうございました。(^_^)/~~

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

> DocumentではなくElementオブジェクトを作成したいのですが、 > どのようにすればよいでしょうか? Element を作るんじゃなく、Document から Element を取得するんです。 > DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance(); > DocumentBuilder db = dbf.newDocumentBuilder(); > Document doc = db.parse(new InputSource(new StringReader("<a/>"))); Element e = doc.getDocumentElement(); # 気が付きゃなんてことないんですけどね

ns18
質問者

補足

a-kumaさんには以前にも何度かお世話になりました。 今回も私などの質問に回答を頂き、誠にありがとうございます。m(_ _)m DOMのDocumentクラスのオブジェクトがあって、そのルート要素の子供に 作成したElementオブジェクトを設定したいのですが、 上記の方法で取得したElementオブジェクトをappendChild()で設定しようと してもエラーになってしまいます(appendChild()の使い方がちがうのでしょうか?)。 "DOM006 Hierarchy request error"とかいうエラーメッセージが表示されます。 また、JDOMのElement#addContent()でルート要素に作成したJDOMのElementオブジェクトを設定しようとしても、 "The element "a" could not be added as a child of "b": The element already has an existing parent (the document root)" とかいうエラーメッセージが表示されます。 わかりにくい書き方で申し訳ないのですが、もし何かお気づきの点があれば、 再度回答をお願いできませんか?

関連するQ&A