2016-03-19 15 views
2

XMLファイルをリアルタイムで更新する方法を知りたい。私はこのファイルを持っていた:Update AndroidのXMLファイルを変更する

<?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> 

私はこのような価格の値を更新するために何をすべきですか? :

<?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を検索しましたが、すべて私が解析し、どのようにXmlSerializerを用いて全ファイルを書き込むが、どのようには変更しないようにする方法がわかりました。また、私はthisをJavaで見つけましたが、アンドロイド-XMLの世界にはとても新しいので、Androidで実装することに失敗しました。

+0

xmlファイルを更新するための_simple_方法はありません。 1つはxmlをノードに分解しなければならず、それはかなり麻痺するようになります。あなたが提供したリンクは良い出発点ですが、あなたのコードを修正して改善するのに役立ちます。 –

+0

@GregoryNikitas yrのコメントありがとうございます、残念ながら私の試行はすべて失敗してしまいますので、今はxmlを書くためのコードがなく、解析にはXmlPullParserを公式アンドロイドデベロッパーの方法で使っています。 –

答えて

7

検索と試行で長い1日後にOK、私はJavaのDOMを使用して目標に達しました。 XMLを処理するために、これらのインスタンスを最初のXMLファイルを変更するには:"*"で車Stringを交換することにより

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

または全ての要素:

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 

することは、その後で、すべての「車」の要素のNodeListを作ります。

今それがうまく細かいことまでは例えばKIAの"price"値属性のすべてのノードで検索:このようなTransformerを使用して、同じ場所に新しいファイルを保存し、最後に

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. 
      } 
} 

OKを:

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); 

これはそれです:)。これが役立つことを願っています。

関連する問題