2012-01-24 11 views
7

Quiero editar el valor de un nodo de un archivo XML existente a partir de la tarjeta SD.Cómo editar el valor de un nodo de un archivo XML existente desde una tarjeta SD y guardarlo de nuevo?

Por ejemplo, si quiero editar RouteName 's valor de viaje Montaña a viaje Mar.

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

Intento utilizar el siguiente código pero no afecta al archivo XML en la tarjeta SD.

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

¿Por qué no se actualiza el archivo XML en la tarjeta SD?

Respuesta

10

Finalmente recibí la respuesta de here, gracias ProfSmiles.

La solución fue un cambio de nodes.setNodeValue a 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(); 
} 
Cuestiones relacionadas