Проблемы с установкой нового значения 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>
Любая помощь будет принята с благодарностью,
Спасибо, Джош
Ответы
Ответ 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()
для текста между этими тегами элемента. Обратите внимание, что это уничтожит все существующие дочерние элементы.
Ответ 3
<New_Node value="New_Node_value" />
'value' является атрибутом
new_node
чтобы попасть в DOM, я предлагаю вам http://www.w3schools.com/htmldom/default.asp
Ответ 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
>