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 Replies
  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