Script to Add Attributes to XML Tags
To avoid the repetitive task of manually add the same attribute for all elements of the same level in a XML file, use this script in PHP 5, which requires 3 parameters.
With the first script, addatt, the values of the attribute will be added manually.
A second script, addval, reads the values in an array created from an XML file.
Adding attributes without values
For example, to this document:
<doc>
<car name="xxx" />
<car name="yyy" />
</doc>
We will automatically add the attribute "speed" to the tag "car".
<doc>
<car name="xxx" speed="80" />
<car name="yyy" speed="90" />
</doc>
Using the script
It requires three parameters
- The XML file name (fname).
- The tag name (tname).
- The name of the attribute to add (aname).
The command has the following form:
solp addatt fname tname aname
The new XML document is saved as test.xml.
You have then to delete the original file to rename test.xml under its name.
The scriptol code
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)
The PHP code
$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);
Adding attributes with values
Using the script
A last parameter is added: the name of the XML file where the values are read.
The code
The previous function is modified to read the values in an array and assign them to the elements.
This implies that the elements have an identifier which is also in the table. To do this we create an associative array with the id as key and for the value that of the attribute.
Reading values in an XML file
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
Assigning values to XML elements
while i < size
de = dnl.item(i)
text id = de.getAttribute(tagid)
de.setAttribute(aname, a[id])
let i + 1
This time, the attributes are assigned according to the tag name and the identifier of the element that should be the key in the table.
Download source codes (Scriptol/PHP)