Сценарий: добавление атрибута в XML-файл

Чтобы избежать повторяющейся задачи ручного добавления одного и того же атрибута ко всем элементам на одном уровне в XML-файле, воспользуемся этим PHP 5 скриптом, который требует трех параметров.

В первом сценарии addatt значения атрибутов будут добавлены вручную.
Второй сценарий, addval, считывает значения из массива, который он создает, из другого XML-файла.

Добавление атрибутов без значений

Например, из этого документа:

<doc>
<car model="xxx" />
<car model="yyy" />
</doc>

Мы хотим автоматически добавлять атрибут «скорость» к тегам «автомобиль».

<doc>
<car model="xxx" speed="80" />
<car model="yyy" speed="90" />
</doc>

Использование сценария

Он требует трех параметров.

Команда имеет следующий формат:

solp addatt fname tname aname

Новый XML-документ сохраняется под именем test.xml.
Затем мы удаляем исходный файл, чтобы переименовать test.xml под его именем .

Код скриптола

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)

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);

Добавление атрибутов с их значениями

Использование сценария

Добавляется последний параметр - имя XML-файла, в котором считываются значения.

Кодекс

Предыдущая функция изменяется для считывания значений из массива и назначения их элементам.

При этом предполагается, что элементы имеют идентификатор, который также находится в массиве. Для этого создадим ассоциативный массив с идентификаторами в качестве ключей и значениями атрибута в качестве значений.

Чтение значений из 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

Присвоение значений

while i < size
de = dnl.item(i)
text id = de.getAttribute(tagid)
de.setAttribute(aname, a[id])
let i + 1

На этот раз атрибуты назначаются на основе имени тега и идентификатора элемента, который должен быть ключом в массиве.

Скачать исходный код (/PHP)