Я знаю, что в этом случае значение является атрибутом, но я не знаю, что это за значение, когда я устанавливаю setNodeValue, и почему код, который я пробую, не работает.

я есть следующий код:

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>

Любая помощь будет принята с благодарностью,

Спасибо джош

 robert_x4413 янв. 2011 г., 16:11
Вы пишете новый DOM обратно в файл? Я не вижу ссылок на написание, а вы имеете в виду просмотр XML.
 Grammin13 янв. 2011 г., 16:26
@ RD01 - Да, я записываю его обратно в файл. Я думаю, что мой главный вопрос на данный момент заключается в том, что делает node.setNodeValue (), если он не устанавливает текст или атрибут?

Ответы на вопрос(4)

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

вместо использования общего узла для того, что вы получаете от каждого метода. Это сделает ваш код легче для чтения / отладки.

Во-вторых,getNodeValue() / setNodeValue() методы работают по-разному, в зависимости от типа вашего узла. Смотрите краткое изложениеКласс узла для справки. Для элемента вы не можете использовать эти методы, хотя для текстового узла вы можете.

Как отметил @dogbane, используйтеsetTextContent() для текста между тегами этого элемента. Обратите внимание, что это уничтожит любые существующие дочерние элементы.

в моем случае это решение работает, потому что функция setTextContent () не существует. Я работаю с Google Web Toolkit (GWT) (это среда разработки Java), и мне импортирована библиотека XMLParser, так как я могу использовать DOM Parser.

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

Document doc = XMLParser.createDocument ();

Элемент node = doc.createElement ("New_Node"); node.appendChild (doc.createTextNode ( "значение"));

doc.appendChild (узел);

Результат:

<New_Node> значение </New_Node>

<New_Node value="New_Node_value" />

new_node

элемент, для входа в DOM я предлагаю вамhttp://www.w3schools.com/htmldom/default.asp

 Grammin13 янв. 2011 г., 15:26
Я знаю, что в этом случае значение является атрибутом, но я не знаю, что это за значение, когда я устанавливаю setNodeValue, и почему код, который я пробую, не работает.
Решение Вопроса

Следующий код:

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>

Надеюсь, это проясняет.

 Grammin13 янв. 2011 г., 16:32
Спасибо за пояснение!
 Grammin13 янв. 2011 г., 16:22
Ах, это проясняет, так что делает node.setNodeValue ()?
 dogbane13 янв. 2011 г., 16:29
setNodeValue варьируется в зависимости от типа узла (взгляните на таблицу в javadocs:download.oracle.com/javase/6/docs/api/org/w3c/dom/Node.html). Если узел являетсяElement тогда установка nodeValue ничего не делает, потому что nodeValuenull.

Ваш ответ на вопрос