2010-07-05 123 views
1

我想使用Java在XML中追加一个属性。例如:如何将属性添加到Java中的现有XML元素?

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

它要添加weight到它(假设它被计算并且然后响应所附)。我如何将它附加到所有项目?

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

你已经在使用一个库来解析这个XML并把它变成对象或数据结构? 你的问题的任何答案将取决于你已经使用的。 – 2010-07-05 18:45:25

回答

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 2010-07-22 16:55:31

+0

你能标记我的答案接受然后呢? – 2010-07-22 23:44:43

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表达式,那么我们迭代通过该表达式的元素并添加weight属性。

最后两行只是验证它的白魔法:-)

+0

谢谢Andreas_D,虽然我使用DOM进行XML解析.. – Jeba 2010-07-22 16:55:12

相关问题