Mi sto studiando le DOM Functions di PHP.
Credevo di aver cominciato a capire come funziona la cosa ma mi viene riportato un'errore che non comprendo.
il mio file xml
Codice PHP:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<elemento id="1">
<titolo id="15">TITOLO 1</titolo>
<contenuto id="2">descrizione 1</contenuto>
<galleria id="3"><img id="4">03155.jpg</img><img id="5">palco2.jpg</img></galleria>
</elemento>
<elemento titolo="titolo 2" id="6">
<titolo id="16">TITOLO 2</titolo>
<contenuto id="7">descrizione 2</contenuto>
<galleria id="8"><img id="9">demolizioni2.jpg</img><img id="10">palco2.jpg</img><img id="11">03155.jpg</img></galleria>
</elemento>
<elemento titolo="titolo 3" id="12">
<titolo id="17">TITOLO 3</titolo>
<contenuto id="13">descrizione 3</contenuto>
<galleria id="14"></galleria>
</elemento>
</root>
Lo script php
Codice PHP:
Class xmlsource{
private $xml;
private $root;
private $xpath;
private $doc;
function init($xml){
$this->xml=$xml;
$this->doc = new DOMDocument();
$this->doc->preserveWhiteSpace = false;
$this->doc->load($xml);
$this->xpath = new DOMXPath($this->doc);
$this->root = $this->doc->documentElement;
}
function findnodes($query){
return $this->xpath->query($query);
}
function delnodes($query){
$nodes = $this->findnodes($query);
foreach($nodes as $node){
$this->root->removeChild($node);
}
file_put_contents($this->xml, $this->doc->saveXML());
}
}
$contenuto = new xmlsource();
$contenuto->init('datip1.xml');
in pratica ho creato un metodo che riceve un xpath ed elimina tutti i nodi che corrispondono.
numerose prove erano andate a buon fine, poi cambio l'xml con quello che ho indicato, cerco di cancellare tutti i nodi img con:
$contenuto->delnodes('//img');
e mi da il seguente errore:
Fatal error: Uncaught exception 'DOMException' with message 'Not Found Error' in /opt/apache/htdocs/kma/kma-systems/index.php:22 Stack trace: #0 /opt/apache/htdocs/kma/kma-systems/index.php(22): DOMNode->removeChild(Object(DOMElement)) #1 /opt/apache/htdocs/kma/kma-systems/index.php(31): xmlsource->delnodes('//img') #2 {main} thrown in /opt/apache/htdocs/kma/kma-systems/index.php on line 22
Se tento invece di rimuovere i tag elemento
$contenuto->delnodes('//elemento');
va tutto bene e l'operazione va a buon fine