2016-03-19 18 views
2

Bir XML dosyasını gerçek zamanlı olarak nasıl güncelleyebileceğimi bilmek istiyorum. Bu dosya için örnekte:Güncelleme Android'de bir XML dosyasını değiştir

<?xml version="1.0" encoding="UTF-8"?> 
    <Cars> 
     <car make="Toyota" model="95" hp="78" price="120"/> 
     <car make="kia" model="03" hp="80" price="300"/> 
    </Cars> 

Bunun gibi fiyat değerini güncellemek için ne yapmalıyım? :

<?xml version="1.0" encoding="UTF-8"?> 
    <Cars> 
     <car make="Toyota" model="95" hp="78" price="50"/> 
     <car make="kia" model="03" hp="80" price="100"/> 
    </Cars> 

Web'de arama var ama hepsi ben ayrıştırın ve nasıl XmlSerializer kullanarak tüm dosyayı yazmak için, ama nasıl değiştirmek değil nasıl olduğunu gördük. Ayrıca Java'da this'u buldum ama Android'de bunu uygulayamadım çünkü android-xml dünyasında çok yeniyim.

+0

Maalesef xml dosyasını güncellemek için _simple_ yolu yok. Birisi xml'yi düğümlere ayırmak zorundadır ve bu oldukça akıl almaz hale gelir. Sağladığınız bağlantı iyi bir başlangıç ​​noktasıdır, ancak bunu düzeltmenize yardımcı olması için kodunuzun bir kısmını sağlayın. –

+0

@GregoryNikitas yr yorum için teşekkür ederim, maalesef tüm denemelerim ile biter artık xml yazmak için hiçbir kod yok ve ayrıştırmak için ben resmi bir android dev yolu olarak bir XmlPullParser kullanıyorum ve işe yarıyor. –

cevap

7

Arama ve denemelerle uzun bir günün ardından Tamam, Java'nın DOM'sini kullanarak Hedefime ulaştım. XML dosyasını değiştirmek için öncelikle XML işlemek için şu örneğini:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder = factory.newDocumentBuilder(); 
Document doc = builder.parse(context.openFileInput("MyFileName.xml")); // In My Case it's in the internal Storage 

sonra bütün "araba" elemanları için NodeList olun:

NodeList nodeslist = doc.getElementsByTagName("car"); 

veya "*" ile araba String değiştirerek tüm unsurları.

for(int i = 0 ; i < nodeslist.getLength() ; i ++){ 
      Node node = nodeslist.item(i); 
      NamedNodeMap att = node.getAttributes(); 
      int h = 0; 
      boolean isKIA= false; 
      while(h < att.getLength()) { 
       Node car= att.item(h); 
       if(car.getNodeValue().equals("kia")) 
        isKIA= true;  
       if(h == 3 && setSpeed) // When h=3 because the price is the third attribute 
        playerName.setNodeValue("100"); 
       h += 1; // To get The Next Attribute. 
      } 
} 

Tamam Nihayet, böyle Transformer kullanarak aynı konumda yeni dosya Kaydet:

TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
Transformer transformer = transformerFactory.newTransformer(); 
DOMSource dSource = new DOMSource(doc); 
StreamResult result = new StreamResult(context.openFileOutput("MyFileName.xml", Context.MODE_PRIVATE)); // To save it in the Internal Storage 
transformer.transform(dSource, result); 
de her düğüm arama Şimdi

ince bunun kadar örneğin KIA "price" değerini bağlıyor

İşte bu kadar :). Umarım bu yardımcı olur.

İlgili konular