Script: Ajouter un attribut dans un fichier XML
Pour éviter la tâche répétitive d'ajouter manuellement un même attribut à tous les éléments d'un même niveau dans un fichier XML, on utilisera ce script en PHP 5 qui requiert 3 paramètres.
Avec le premier script, addatt, les valeurs de l'attribut seront ajoutées manuellement.
Un second script, addval, lit les valeurs dans un tableau qu'il crée à partir d'un autre fichier XML.
Ajouter des attributs sans valeurs
Par exemple, à partir de ce document:
<doc>
<voiture modele="xxx" />
<voiture modele="yyy" />
</doc>
On veut ajouter automatiquement l'attribut "vitesse" au balises "voiture".
<doc>
<voiture modele="xxx" vitesse="80" />
<voiture modele="yyy" vitesse="90" />
</doc>
Utiliser le script
Il requiert trois paramètre
- Le nom du fichier XML (fname).
- Le nom d'une balise (tname).
- Le nom de l'attribut à ajouter (aname).
La commande a alors la forme suivante:
solp addatt fname tname aname
Le nouveau document XML est sauvé sous le nom de test.xml.
On efface alors le fichier originel pour renommer test.xml sous son nom.
Le code scriptol
DOMDocument docsrc = DOMDocument("1.0")
docsrc.load(filename)
DOMNodeList dnl = docsrc.getElementsByTagName(tname)
DOMElement de = null
int i = 0
while i < dnl.length
de = dnl.item(i)
de.setAttribute(aname, "")
let i + 1
docsrc.save(filename)
Le code PHP
$docsrc=new DOMDocument("1.0");
$docsrc->load($filename);
$dnl=$docsrc->getElementsByTagName($tname);
$i = 0;
while($i<$dnl->length)
{
$de=$dnl->item($i);
$de->setAttribute($aname,"");
$i+=1;
}
$docsrc->save($filename);
Ajouter des attributs avec leur valeur
Utiliser le script
Un paramètre final est ajoute: le nom du fichier XML où sont lues les valeurs.
Le code
La fonction précédente est modifiée de façon à lire les valeurs dans un tableau et les assigner aux éléments.
Cela suppose que les éléments aient un identifieur qui figure également dans le tableau. Pour cela on crée un tableau associatif avec les id comme clés, et comme valeurs celle de l'attribut.
Lecture des valeurs dans un fichier XML
DOMNodeList dnl = docval.getElementsByTagName(tname)
DOMElement de = null
array a = {}
for int i in 0 -- dnl.length
de = dnl.item(i)
text id = de.getAttribute(tagid) // get the ID
text value = de.getAttribute(aname) // get the value of the property for this ID
a[id] = value
/for
Assigner les valeurs
while i < size
de = dnl.item(i)
text id = de.getAttribute(tagid)
de.setAttribute(aname, a[id])
let i + 1
Cette fois les attributs sont assignés en fonction du nom de balise et de l'identifieur de l'élément qui doit être la clé dans le tableau.
Télécharger les codes sources (Scriptol/PHP)