2011-10-27 3 views
3

Вот мой XML:атрибут настройки/узел в XML в Java

<root> 
    <A id='1'> 
    <B>Blah</B> 
    <C>Test</C> 
    </A> 
</root> 

Я хотел бы добавить под поэтому мой окончательный XML хотел:

<root> 
    <A id='1'> 
    <B>Blah</B> 
    <C>Test</C> 
    <D>New value</D> 
    </A> 
</root> 

я могу получить узел в XPath, используя //A, и я не уверен, как добавлять или редактировать значения после получения узла.

+2

Там же много подобных вопросов, пожалуйста, посмотрите вокруг первой. Какие технологии вы используете и каково значение для нового узла? Это очень важно знать. Используете ли вы SAX, StAX, DOM, JDOM ...? Являются ли ваши синтаксические разборки, преобразование с использованием XSLT, привязка к JAXB? –

+0

Я использую DOM. Я не использую XSLT. – ed1t

ответ

4
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
StringReader xml = new StringReader("<root><A id='1'><B>Blah</B><C>Test</C></A></root>"); 
Document doc = db.parse(new InputSource(xml)); 
XPathFactory xPathfactory = XPathFactory.newInstance(); 
XPath xpath = xPathfactory.newXPath(); 
XPathExpression expr = xpath.compile("//A"); 
Element element = doc.createElement("D"); 
element.setTextContent("new value"); 
NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET); 
for(int i = 0; i < nodes.getLength(); i++) { 
    Node node = nodes.item(i); 
    node.appendChild(element); 
} 
0

Проверить this method интерфейса Node из DOM. Element расширяет это, поэтому вам сначала нужно получить элемент для A. Используйте this method на свой экземпляр Document или какой-либо другой подходящий метод из класса, чтобы создать желаемый элемент D, а затем установите его содержимое.

0

Помимо использования DOM API напрямую, вы можете также использовать jOOX, простую библиотеку-оболочку для DOM, который я создал:

// With css-style selectors 
$(document).find("A").append("<D>New value</D>"); 

// With XPath 
$(document).xpath("//A").append("<D>New value</D>"); 
Смежные вопросы