2011-07-07 34 views
1

我想修改XML標籤值的文字我已經使用了XML如下如何編輯xml文本值?

<note> 
     <to>Tove</to> 
     <from>Jani</from> 
     <heading>Reminder</heading> 
     <body>Don't forget me this weekend!</body> 
</note> 

在這裏,我想從名字賈尼作爲普拉薩德改變我。怎麼可以恰克通過使用Java代碼

我寫一個Java代碼如下

try{ 
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 
    Document doc = docBuilder.parse(new File("/mnt/sdcard/one.xml")); 

    //Get the staff element by tag name directly 
    Node nodes = doc.getElementsByTagName("note").item(0); 
    //loop the staff child node 
    NodeList list = nodes.getChildNodes(); 

    for (int i =0; i<list.getLength();i++){ 
     Node node = list.item(i); 

     //get the salary element, and update the value 
     if("from".equals(nodes.getNodeName())){ 
      node.setNodeValue("prasad"); 

      TransformerFactory factory = TransformerFactory.newInstance(); 
      Transformer transformer = factory.newTransformer(); 

      DOMSource source = new DOMSource(doc); 
      StreamResult result = new StreamResult(new File("/mnt/sdcard/one.xml")); 
      transformer.transform(source, result); 


     } 
    } 

} 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
+0

容易得多,請告訴我你的代碼的問題?另外,如果更頻繁地更新名稱和其他標籤,[SQLiteDatabase](http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html)將更適合這項工作。 –

+0

@ prasad.gai嗨,對不起,打擾你..只是,我有類似的問題,你喜歡你,我想問你,並建議。我的問題是,在嘗試上面的代碼後,SD卡中xml文件的節點值不會改變。 –

回答

2

。在你的代碼的問題:「賈尼」與「從」父元素節點的文本節點。所以你應該改變文本節點的值。

... 
    for (int i =0; i<list.getLength();i++) { 
     Node node = list.item(i); 

     //get the salary element, and update the value 
     if("from".equals(node.getNodeName())){ 
      Text text = (Text) ((Element) node).getChildNodes().item(0); 
      text.setNodeValue("prasad"); 
     } 
    } 

    TransformerFactory factory = TransformerFactory.newInstance(); 
    Transformer transformer = factory.newTransformer(); 

    DOMSource source = new DOMSource(doc); 
    StreamResult result = new StreamResult(new File("/mnt/sdcard/one.xml")); 
    transformer.transform(source, result); 
... 

我想正則表達式會完成這個任務

"your xml as string".replaceAll("<from>.*?</from>", "<from>prasad</from>"); 
+0

感謝您的RegExp解決方案,真的非常有用, – Apache