установка атрибута / узла в XML в Java - PullRequest
3 голосов
/ 27 октября 2011

Вот мой XML:

<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, и я не уверен, как добавить или изменить значения после получения узла.

Ответы [ 3 ]

4 голосов
/ 27 октября 2011
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 голосов
/ 26 января 2012

Помимо использования 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>");
0 голосов
/ 27 октября 2011

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

...