2010-10-25 45 views
1

我有一个像字符串:如何在java中使用xml添加新值?

 String msg= 
     <?xml version="1.0" encoding="UTF-8" standalone="no"> 
     <validateEmail> 
     <emailid>[email protected]</emailid> 
     <instanceid>instance1</instanceid> 
     <msgname>validatemsg</msgname> 
     <taskid>task1</taskid> 
     </validateEmail> 

我是怎么能够这个字符串转换成XML文件,并添加一个新的节点。

感谢

回答

3

此代码的字符串转换成XML文档,增加了一个新的节点,然后打印出来作为一个字符串,因此您可以检查它看起来是正确的。

public void xml() throws ParserConfigurationException, SAXException, IOException { 
    String msg = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>"; 
    msg += "<validateEmail><emailid>[email protected]</emailid><instanceid>instance1</instanceid>"; 
    msg += "<msgname>validatemsg</msgname><taskid>task1</taskid></validateEmail>"; 

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = factory.newDocumentBuilder(); 

    Document doc = builder.parse(new ByteArrayInputStream(msg.getBytes())); 

    Node newNode = doc.createElement("newnode"); 
    newNode.setTextContent("value"); 
    Node root = doc.getFirstChild(); 
    root.appendChild(newNode); 

    try { 
     DOMSource domSource = new DOMSource(doc); 
     StringWriter writer = new StringWriter(); 
     StreamResult result = new StreamResult(writer); 
     TransformerFactory tf = TransformerFactory.newInstance(); 
     Transformer transformer = tf.newTransformer(); 
     transformer.transform(domSource, result); 
     System.out.println(writer.toString()); 
    } catch (TransformerException ex) { 
     ex.printStackTrace(); 
    } 
} 
1

首先创建一个表示你的XML一个DOM(文档对象模型)对象。

byte[] xmlBytes = msg.getBytes("UTF-8"); 
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
DocumentBuilder db = dbf.newDocumentBuilder(); 
Document doc = db.parse(new ByteArrayInputStream(xmlBytes)); 

然后,你需要你的新节点添加到它:

Element newNode = doc.createElement("myNode"); 
newNode.setTextContent("contents of node"); 
Element root = doc.getDocumentElement(); // the <validateEmail> 
root.appendChild(newNode); 

然后你想将它写入到文件系统,如果我理解正确的问题。

File outputFile = ...; 
Source source = new DOMSource(doc); 
Result result = new StreamResult(outputFile); 
Transformer xformer = TransformerFactory.newInstance().newTransformer(); 
xformer.transform(source, result); 
相关问题