Newsgroup: it.comp.www.php
Titolo: Domdocument append/replace child mi modificano l'xml

 
Ciao
 
ho dei problemi con la modifica ad un xml (che rappresenta una sitemap 
per google).
 
La sitemap è composta da tanti:
 
  <url> 
    <loc>
http://www.xxx.it
</loc>
    <lastmod>2013-03-22T15:32:18+02:00</lastmod>
    <changefreq>weekly</changefreq>
    <priority>1.00</priority>
    <image:image>
      <image:loc>
http://www.xxx.it/logo.jpg
</image:loc>
    </image:image>
    <PageMap xmlns="
http://www.google.com/schemas/sitemap-pagemap/1.0
">
      <DataObject type="company" id="7">
        <Attribute name="name">XXX</Attribute>
        <Attribute name="description">Descrizione XXX</Attribute>
     <Attribute name="last_update">22/03/2013</Attribute>
    </DataObject>
  </PageMap>
</url>
 
Il procedimento che seguo è:
creo un documento che contiene il nodo  con i contenuti aggiornati:
 
questo è il suo saveXML
 
<?xml version="1.0"?>
<url>
<loc>
http://www.xxx.it/2
</loc>
<lastmod>2012-01-18T16:53:16+02:00</lastmod>
<changefreq>weekly</changefreq>
<priority>1.00</priority>
<PageMap xmlns="
http://www.google.com/schemas/sitemap-pagemap/1.0
">
<DataObject type="company" id="7">
<Attribute name="name">XXX2</Attribute>
<Attribute name="last_update">22/04/2013</Attribute>
</DataObject>
</PageMap>
</url>
 
 
Quindi , come in ogni guida, passo ad estrare il nodo  dal nuovo0 
documewnto:
 
$node = $newDocument->getElementsByTagName("url")->item(0);
 
importo il nodo nel vecchio documento:
 
$newnode = $document->importNode($node, true);
 
faccio una replace (ma il risultato ottenuto  è uguale acnhe con una 
replace)
 
 
 
$oldnode->parentNode->replaceChild($newnode,$oldnode);
 
A questo punto salvo il flusso e chiudo. 
$document->save('...sitemap.xml');
 
Ecco, a questo punto al poso della porzxione di xml delo vecchio nodo mi 
ritrovo una cosa del genere:
 
 
<url xmlns:default="
http://www.google.com/schemas/sitemap-pagemap/1.0
">
<loc>
http://www.xxx.it/2
</loc>
<lastmod>2012-01-18T16:53:16+02:00</lastmod>
<changefreq>weekly</changefreq>
<priority>1.00</priority>
<default:PageMap xmlns="
http://www.google.com/schemas/sitemap-
 
pagemap/1.0">
<default:DataObject type="company" id="7">
<default:Attribute name="name">XXX2</default:Attribute>
<default:Attribute name="last_update">18/01/2012</default:Attribute>
</default:DataObject>
</default:PageMap>
</url>
 
Non capisco il perchè, in alcuni dei tag (non tutti)   viene aggiunto : 
"default:" 
 
Qualcuno ha idea del perchè? 
Non  riesco a trovare niente a riguardo in rete.
 
 
 
 
 

 <url xmlns:default="
http://www.google.com/schemas/sitemap-pagemap/1.0
">
 
Solved
 
Il problema stava nella aggiunta del namespace xmlns:default al tag 
<url> durante  la import nel documento.
 
Non sono riuscito a capire se è possibile dire preventivamente di non 
aggiungere la specifica sul namespace default durante l'import.
 
Ma ho risolto rimuovendo tale attributo a posteriori tramite:
 
http://www.php.net/manual/en/domelement.removeattributens.php
 
 
che nel mio caso si traduce in:
 
$newnode->removeAttributeNS('
http://www.google.com/schemas/sitemap-
 
pagemap/1.0', 'default');
 
con $newnode risultato delle operazioni importNode + replaceChild (o 
appendchild)