Подтвердить что ты не робот

Проблемы с установкой нового значения node в java, dom, xml parsing

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

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

а затем я хотел бы создать новый элемент в node прямо под корнем node с помощью этого кода:

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

Проблема заключается в том, что node создается и добавляется, но значение не задано. Я не знаю, могу ли я просто не увидеть значение, когда я смотрю на свой xml, если он скрыт каким-то образом, но я не думаю, что этот случай, потому что я попытался получить значение node после создания node и возвращает null. Я новичок в xml и dom, и я не знаю, где хранится значение нового node. Это как атрибут?

<New_Node value="New_Node_value" />

или он имеет значение здесь:

<New_Node> New_Node_value </New_Node>

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

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

4b9b3361

Ответ 1

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

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

Для пояснения при создании узлов используйте:

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 класс для справки. Для элемента вы не можете использовать эти методы, хотя для текста Node вы можете.

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

Ответ 4

Это другое решение, в моем случае это решение работает, потому что функция 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(node);

Результат:

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