2010-07-05 6 views
1

Je souhaite ajouter un attribut à un élément existant dans XML en utilisant Java. Par exemple:Comment ajouter un attribut à un élément XML existant dans Java?

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

Il veut ajouter weight à elle (en supposant qu'il est calculé et ajouté en réponse). Comment puis-je ajouter cela à tous les articles?

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

Utilisez-vous déjà une bibliothèque pour analyser ce xml et la transformer en objet ou une structure de données? Toute réponse à votre question dépend de ce que vous utilisez déjà. –

Répondre

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

Merci Eric ça a fonctionné .. – Jeba

+0

Pourriez-vous marquer ma réponse comme acceptée alors? –

0

Voici une solution rapide basée sur 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); 
} 

Tout d'abord, nous construisons un document (SAXBuilder), à côté, nous créons une expression XPath pour le nœud détails, nous parcourons à travers les éléments de cette expression et ajoutez l'attribut weight.

Les deux dernières lignes vérifient juste que c'est la magie blanche :-)

+0

Merci Andreas_D bien que j'utilise DOM pour l'analyse XML. – Jeba

Questions connexes