2010-07-05 4 views
1

Я хочу добавить атрибут существующего элемента в XML, используя Java. Например:Как добавить атрибут к существующему элементу XML в Java?

<employee> 
<details name="Jai" age="25"/> 
<details name="kishore" age="30"/> 
</employee> 

Он хочет, чтобы добавить weight к нему (предположим, что она рассчитана, а затем добавляется в ответ). Как я могу добавить это ко всем элементам?

<details name="Jai" age="25" weight="55"/> 
+2

Вы уже используете библиотеку, чтобы разобрать этот XML и превратить его в объект или структуру данных? Любой ответ на ваш вопрос будет зависеть от того, что вы уже используете. –

ответ

3
import org.w3c.dom.*; 
import java.io.*; 
import javax.xml.parsers.*; 
import javax.xml.transform.*; 
import javax.xml.transform.dom.*; 
import javax.xml.transform.stream.*; 

public class AddAndPrint { 

    public static void main(String[] args) {  
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 
    Document doc = docBuilder.parse("/path/to/file.xml"); 
    NodeList employees = document.getElementsByTagName("employee"); 
    for (Node employee : employees) { 
     for (Node child : employee.getChildNodes() { 
     if ("details".equals(child.getNodeName()) child.setAttribute("weight", "150"); 
     } 
    } 

    try { 
     Source source = new DOMSource(doc); 
     StringWriter stringWriter = new StringWriter(); 
     Result result = new StreamResult(stringWriter); 
     TransformerFactory factory = TransformerFactory.newInstance(); 
     Transformer transformer = factory.newTransformer(); 
     transformer.transform(source, result); 
     System.out.println(stringWriter.getBuffer().toString()); 
    } catch (TransformerConfigurationException e) { 
     e.printStackTrace(); 
    } catch (TransformerException e) { 
     e.printStackTrace(); 
    } 
    } 
} 
+0

Спасибо Эрик, он сработал. – Jeba

+0

Не могли бы вы пометить мой ответ, как принято тогда? –

0

Вот быстрое решение, основанное на JDOM:

public static void main(String[] args) throws JDOMException, IOException { 
    File xmlFile = new File("employee.xml"); 
    SAXBuilder builder = new SAXBuilder(); 
    Document build = builder.build(xmlFile);   
    XPath details = XPath.newInstance("//details"); 
    List<Element> detailsNodes = details.selectNodes(build); 
    for (Element detailsNode:detailsNodes) { 
     detailsNode.setAttribute("weight", "70"); // static weight for demonstration 
    } 
    XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat()); 
    outputter.output(build, System.out); 
} 

Во-первых, мы строим документ (SAXBuilder), затем мы создаем выражение XPath для деталей узла, то итерацию через элементы для этого выражения и добавить атрибут веса.

Последние две строки просто убедитесь, что это белая магия :-)

+0

Спасибо Andreas_D, хотя я использую DOM для XML-анализа. – Jeba

Смежные вопросы