En resumen; Tengo muchas líneas vacías generadas en un archivo XML, y estoy buscando una manera de eliminarlas como una forma de inclinar el archivo. Cómo puedo hacer eso ?¿Cómo eliminar las líneas adicionales vacías del archivo XML?
Para una explicación detallada; Actualmente tengo este archivo XML:
<recent>
<paths>
<path>path1</path>
<path>path2</path>
<path>path3</path>
<path>path4</path>
</paths>
</recent>
y utilizo este código Java para eliminar todas las etiquetas, y añadir otros nuevos en su lugar:
public void savePaths(String recentFilePath) {
ArrayList<String> newPaths = getNewRecentPaths();
Document recentDomObject = getXMLFile(recentFilePath); // Get the <recent> element.
NodeList pathNodes = recentDomObject.getElementsByTagName("path"); // Get all <path> nodes.
//1. Remove all old path nodes :
for (int i = pathNodes.getLength() - 1; i >= 0; i--) {
Element pathNode = (Element)pathNodes.item(i);
pathNode.getParentNode().removeChild(pathNode);
}
//2. Save all new paths :
Element pathsElement = (Element)recentDomObject.getElementsByTagName("paths").item(0); // Get the first <paths> node.
for(String newPath: newPaths) {
Element newPathElement = recentDomObject.createElement("path");
newPathElement.setTextContent(newPath);
pathsElement.appendChild(newPathElement);
}
//3. Save the XML changes :
saveXMLFile(recentFilePath, recentDomObject);
}
Después de ejecutar este método varias veces me sale un XML archivo con resultados correctos, pero con muchas líneas vacías después de la etiqueta de "caminos" y antes de la primera etiqueta "camino", como este:
<recent>
<paths>
<path>path5</path>
<path>path6</path>
<path>path7</path>
</paths>
</recent>
Cualquier persona sabe cómo solucionar esto?
------------------------------------------- Editar: Agregue el código getXMLFile (...), saveXMLFile (...).
public Document getXMLFile(String filePath) {
File xmlFile = new File(filePath);
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document domObject = db.parse(xmlFile);
domObject.getDocumentElement().normalize();
return domObject;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public void saveXMLFile(String filePath, Document domObject) {
File xmlOutputFile = null;
FileOutputStream fos = null;
try {
xmlOutputFile = new File(filePath);
fos = new FileOutputStream(xmlOutputFile);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
DOMSource xmlSource = new DOMSource(domObject);
StreamResult xmlResult = new StreamResult(fos);
transformer.transform(xmlSource, xmlResult); // Save the XML file.
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
} finally {
if (fos != null)
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Podría ser útil para ver el contenido de su método saveXMLFile. – Markus
@Markus ... Claro, he editado la pregunta. – Brad
Puedes echar un vistazo a [Eliminar nodos y líneas vacías en XML usando Java] (http://techxplorer.com/2010/05/24/deleting-nodes-and-empty-lines-in-xml-using-java /) y http://stackoverflow.com/questions/7190639/remove-all-blank-spaces-and-empty-lines – MadProgrammer