I wan reemplazar un nodo del documento XML con otro, y como consecuencia de reemplazar a todos los niños con otro tipo de contenido. Siguientes del código de trabajo, pero por una razón desconocida no.

File xmlFile = new File("c:\file.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile);
doc.getDocumentElement().normalize();

NodeList nodes = doc.getElementsByTagName("NodeToReplace");
for (int i = 0; i < nodes.getLength(); i++) {

    NodeList children = nodes.item(i).getChildNodes();
    for (int j = 0; j < children.getLength(); j++) {
          nodes.item(i).removeChild(children.item(j));
    }
        doc.renameNode(nodes.item(i), null, "MyCustomTag");  
}

EDITAR-

Después de la depuración de un rato, me sovled ella. El problema estaba en movimiento índice de los hijos de la matriz de elmts. Aquí está el código:

NodeList nodes = doc.getElementsByTagName("NodeToReplace");
for (int i = 0; i < nodes.getLength(); i++) {

    NodeList children = nodes.item(i).getChildNodes();

    int len = children.getLength();
    for (int j = len-1; j >= 0; j--) {
        nodes.item(i).removeChild((Node) children.item(j));
    }
    doc.renameNode(nodes.item(i), null, "MyCustomTag");  
}
  • «por una razón desconocida no» no es útil. ¿Qué hacer? Nada en absoluto? Lanza una Excepción? Hace huevo y tocino?
  • Usted no tiene que quitar manualmente los niños? No es posible reemplazar sólo el nodo con el que quieres tener?
  • Se cambia el nombre del nodo, pero falla en la supresión de lo infantiles y no puedo encontrar el error en él.
  • Él es cambiar el nombre del nodo, en lugar de eliminar y crear uno nuevo, supongo que es por eso que él está tratando de sacar a los niños también. Estás haciendo de esta manera porque usted quiere asegurarse de que están exactamente en el mismo lugar?
  • Sí, eso es lo que yo quiero.

2 Comentarios

  1. 8

    Trate de usar replaceChild a hacer toda la jerarquía a la vez:

    NodeList nodes = doc.getElementsByTagName("NodeToReplace");
    for (int i = 0; i < nodes.getLength(); i++) {
        Node node = nodes.item(i);
        Node newNode = //Create your new node here.
        node.getParentNode().replaceChild(newNode, node);
    }
    • ¿Cómo puedo instatntiate Nodo?
    • Hay un par de maneras, quizás quieras usar doc.createTextNode(String) para crear una plantilla nodo y, a continuación, clon que para cada newNode.
  2. 0

    Manera fácil de hacerlo es usando expresiones regulares.

    String payload= payload.replaceAll("<payload>([^<]*)</payload>", "<payload>NODATA</payload>");

    Esto se asegurará de que toda la carga de los nodos contenidos son reemplazados con NODATA

Dejar respuesta

Please enter your comment!
Please enter your name here