¿Cómo editar el valor de un nodo de un archivo XML existente de una tarjeta SD y guardarlo de nuevo?

Quiero editar el valor de un nodo de un archivo XML existente de la tarjeta SD.

Por ejemplo, si quiero editar el valor de RouteName de Mountain Trip a Sea Trip .

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

Intento utilizar el código siguiente pero no hace efecto al archivo de XML en la tarjeta del 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 de la tarjeta SD?

Finalmente obtuve la respuesta de aquí , gracias ProfSmiles.

La correcció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(); } 
  • ¿Cómo mantener la consistencia con XML drawables a través de diferentes tamaños de pantalla?
  • Android ScrollView establece la altura del contenido visualizado
  • ¿Cómo puedo descompilar archivos dex de forma programática dentro de Android?
  • Actualizado Android SDK y Android Studio desordenado todos mis XML: "Elemento XXX no permitido aquí"
  • ¿Establecer un fondo a los botones en un diálogo?
  • ¿Dónde están los esquemas de archivos XML en un proyecto de Android?
  • ImageView con la altura del wrap_content muestra una foto muy flaca / recortada en lugar de una altura completa
  • Los caracteres especiales no se muestran en android
  • Si ScrollView sólo admite a un hijo directo, ¿cómo se supone que puedo hacer que un diseño completo se pueda desplazar?
  • Cómo poner tres botones de imagen en la misma línea en Android
  • Alinea el texto dentro de un botón en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.