Rimuovere un nodo utilizzando xpath

Ho una struttura xml come segue:

<a>
   <b>
      <foo>null</foo>
   </b>
   <b>
      <foo>abc</foo>
   </b>
   <b>
      <foo>efg</foo>
   </b>
</a>

Sto usando org.w3c.dom.Document per aggiornare i nodi. quando <foo> ha un valore null, voglio rimuovere

<b>
  <foo>null</foo>
</b>

È possibile? So che posso chiamare removeChild(childElement), ma non so come posso specificare per rimuovere lo specifico elemento nidificato sopra.

Aggiornamento: Con la risposta qui sotto, che ho provato:

String query = "/a/b[foo[text() = 'null']]";
Object result = (xpath.compile(newQuery)).evaluate(doc, NODE);
NodeList nodes = (NodeList)result;
for (int i = 0; i < nodes.getLength(); i++)
{
    Node node = nodes.item(i);
    doc.removeChild(node);
}

Ho NOT_FOUND_ERR: An attempt is made to reference a node in a context where it does not exist.

possibile duplicato di Elimina un nodo da file XML in Java

OriginaleL’autore rgamber | 2014-02-17

2 risposte

  1. 7
    doc.removeChild(node);

    non funziona, perché il nodo che si sta tentando di rimuovere non è un figlio del nodo del documento, è un bambino di elemento del documento (il a), che di per sé è un bambino del documento nodo radice. È necessario chiamare removeChild sulla corretta nodo padre:

    node.getParentNode().removeChild(node);
    Era sciocco di me non si notano! Grazie.

    OriginaleL’autore Ian Roberts

  2. 3

    Per ottenere che il nodo è possibile utilizzare XPath:

    /a/b[foo[text() = 'null']]
    Sì, lo posso fare. Ma se io chiamo il removeChild, si rimuove solo il <foo>null</foo>, o <b><foo>null</foo></b>. Anche io non voglio toccare il nodo radice <a>.
    Secondo giro di domande che si desidera rimuovere <b> <foo>null</foo> </b>, giusto?
    sì. Stavo pensando a questa query anche provare a rimuovere/modificare <a>
    Ho aggiornato la mia risposta per ottenere <b><foo>null</foo></b> nodo.
    Grazie per il vostro tempo. Sto provando con la nuova query, ma sto ancora ricevendo un messaggio di errore. Qualche suggerimento?

    OriginaleL’autore Kirill Polishchuk

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *