web-dev-qa-db-ja.com

Java、DOM、XML解析での新しいノード値の設定に関する問題

私は次のコードを持っています:

DocumentBuilder dBuilder = dbFactory_.newDocumentBuilder();
StringReader reader = new StringReader(s);
InputSource inputSource = new InputSource(reader);
Document doc_ = dBuilder.parse(inputSource);

次に、次のコードを使用して、ルートノードの直下のノードに新しい要素を作成します。

Node node = doc_.createElement("New_Node");
node.setNodeValue("New_Node_value");
doc_.getDocumentElement().appendChild(node);

問題は、ノードが作成されて追加されますが、値が設定されていないことです。何らかの方法で非表示になっている場合、xmlを確認しても値が表示されないかどうかはわかりませんが、create node呼び出しの後にノード値を取得しようとしたので、そうではないと思いますそしてnullを返します。 xmlとdomは初めてですが、新しいノードの値がどこに保存されているのかわかりません。それは属性のようなものですか?

<New_Node value="New_Node_value" />

またはそれはここに値を入れますか:

<New_Node> New_Node_value </New_Node>

どんな助けでも大歓迎です、

ありがとう、ジョシュ

22
Grammin

次のコード:

Element node = doc_.createElement("New_Node");
node.setTextContent("This is the content");  //adds content
node.setAttribute("attrib", "attrib_value"); //adds an attribute

生成する:

<New_Node attrib="attrib_value">This is the content</New_Node>

これが明確になることを願っています。

41
dogbane

明確にするために、ノードを作成するときは次を使用します。

_Attr x = doc.createAttribute(...);
Comment x = doc.createComment(...);
Element x = doc.createElement(...);   // as @dogbane pointed out
Text x = doc.createTextNode(...);
_

一般的なNodeを使用する代わりに、各メソッドから取得したものを使用します。これにより、コードの読み取り/デバッグが容易になります。

次に、getNodeValue()/setNodeValue()メソッドは、使用しているNodeのタイプによって異なります。 Nodeクラスの概要を参照してください。 参照用。要素の場合、これらのメソッドは使用できませんが、テキストノードの場合は使用できます。

@dogbaneが指摘したように、この要素のタグ間のテキストにはsetTextContent()を使用します。これは既存の子要素をすべて破壊することに注意してください。

2
robert_x44

これは他のソリューションです。私の場合、setTextContent()関数が存在しないため、このソリューションは機能しています。私はGoogle Web Toolkit(GWT)(開発フレームワークJavaです)を使用しており、DOMパーサーを使用できるようにXMLParserライブラリをインポートしています。

import com.google.gwt.xml.client.XMLParser;

ドキュメントdoc = XMLParser.createDocument();

要素ノード= doc.createElement( "New_Node"); node.appendChild(doc.createTextNode( "value"));

doc.appendChild(node);

結果は次のとおりです。

<New_Node>値</New_Node>

<New_Node value="New_Node_value" />

「値」はの属性です

New_Node

要素、DOMを取得するための推奨事項 http://www.w3schools.com/htmldom/default.asp

0
Timoteo Ponce