La sustitución de nodo XML a través de Java

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 Kommentare

  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

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea