Проблемы с установкой нового значения узла при разборе java, dom, xml - PullRequest
21 голосов
/ 13 января 2011

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

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>

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

Спасибо, Джош

Ответы [ 4 ]

39 голосов
/ 13 января 2011

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

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>

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

2 голосов
/ 13 января 2011

Для пояснения, когда вы создаете узлы, используйте:

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

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

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

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

1 голос
/ 19 февраля 2016

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

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

Документ doc = XMLParser.createDocument ();

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

doc.appendChild (узел);

Результат:

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

0 голосов
/ 13 января 2011
<New_Node value="New_Node_value" />

'value' является атрибутом элемента

New_Node

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...