2010-04-27 7 views
2

J'ai un fichier XML qui ressemble à ceci.Modifier l'attribut XML PHP DOM

<collections id="my collections"> 
<category id="my category"> 
    <record id="my record"> 
    <title>Some Info</title> 
    </record> 
</category> 
</collections> 

Je cherche loin de remplacer tout attribut dans le fichier XML ci-dessus avec un nouvel attribut, utilisant PHP DOM et XPath. Toute aide est très appréciée

Répondre

5

Je ne sais pas ce que vous voulez faire exactement, mais l'idée générale est la suivante:


Ici, par exemple, vous pourrait utiliser quelque chose comme ceci:

$str = <<<XML 
    <collections id="My Collections"> 
    <category id="my category"> 
     <record id="my record"> 
     <title>Some Info</title> 
     </record> 
    </category> 
    </collections> 
XML; 

$dom = new DOMDocument(); 
$dom->loadXML($str); 

$xpath = new DOMXPath($dom); 
$elements = $xpath->query('//record[@id="my record"]'); 
if ($elements->length >= 1) { 
    $element = $elements->item(0); 
    $element->setAttribute('id', "glop !"); 
} 
echo '<pre>' . htmlspecialchars($dom->saveXML()) . '</pre>'; 


cela remplacera la id attribut my record, sur le nœud qui est identifié par elle, par « glop ! », et vous obtiendrez le code XML suivant en sortie:

<?xml version="1.0"?> 
<collections id="My Collections"> 
    <category id="my category"> 
     <record id="glop !"> 
     <title>Some Info</title> 
     </record> 
    </category> 
    </collections> 
1

Suposing id = « mon dossier » est unique dans le fichier XML. Le travail dur est seulement dans l'expression xpath.

$dom = new DomDocument(); 
    $dom->load('test.xml'); 
    $xp = new DomXPath($dom); 
    $res = $xp->query("//*[@id = 'my record']"); 
    $res->item(0)->setAttribute('id','2'); 
    $dom->save('test.xml');