2012-01-24 2 views
7

SDカードから既存のXMLファイルのノードの値を編集します。例えば既存のXMLファイルのノードの値をSDカードから編集して元に戻す方法は?

私は海の旅マウンテンの旅からRouteNameの値を編集したい場合。

<Trip> 
    <RouteID>12345</RouteID> 
    <RouteName>Mountain Trip</RouteName> 
</Trip> 

次のコードを使用しようとしましたが、SDカードのXMLファイルには影響しません。

try { 
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 
    Document doc = docBuilder.parse(
     new File(Environment.getExternalStorageDirectory()+"/Trip/"+tripID+".trip")); 

    Node nodes = doc.getElementsByTagName("RouteName").item(0); 
    // newname is String variable which retrives value from edittext 
    nodes.setNodeValue(newname); 

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

    DOMSource source = new DOMSource(doc); 
    StreamResult result = new StreamResult(
     new File(Environment.getExternalStorageDirectory()+"/Trip/"+tripID+".trip")); 
    transformer.transform(source, result); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

なぜSDカードのXMLファイルが更新されないのですか?

答えて

10

私はついにhereから答えを得ました、ProfSmilesに感謝します。

この修正は、nodes.setNodeValueからnodes.setTextContentに変更されました。

try { 
    String filePath = Environment.getExternalStorageDirectory()+"/Trip/"+tripID+".trip"; 
    File file = new File(filePath); 
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 
    Document doc = docBuilder.parse(file); 

    // Change the content of node 
    Node nodes = doc.getElementsByTagName("RouteName").item(0); 
    // I changed the below line form nodes.setNodeValue to nodes.setTextContent 
    nodes.setTextContent(newname); 

    Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
    transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 

    // initialize StreamResult with File object to save to file 
    StreamResult result = new StreamResult(file); 
    DOMSource source = new DOMSource(doc); 
    transformer.transform(source, result); 

} catch (Exception e) { 
    e.printStackTrace(); 
} 
関連する問題