Если я знаю, что будет только один элемент с таким именем (XML (PHP DOM)), как мне его выбрать?

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

Хотя я несколько успешно добавляю данные, я добавляю не тот элемент.

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

У этих элементов нет идентификатора, и я хочу прочитать их с помощью getElementsByTagName в PHP, используя DOMDocument.

Итак, если я знаю, что во всем файле будет только один элемент с таким именем, могу ли я сделать что-то вроде этого:

$element = $dom->getElementByTagName('ElementName'); $element[0];

Я имею в виду, могу ли я выбрать только первый элемент в массиве? И как мне это сделать? Потому что приведенный выше код не работает.


person Arjun Bajaj    schedule 17.12.2011    source источник
comment
Какая DOM-библиотека? DOMДокумент? ПростойXML?   -  person Michael Berkowski    schedule 17.12.2011


Ответы (2)


TagName относится к имени тега html или xml. Если есть только один, вы должны сделать что-то вроде этого:

$element = $dom->getElementByTagName('ElementName')->item(0);

Однако похоже, что то, что вы действительно ищете, можно сделать с помощью xpath:

$xpath = new DOMXPath($dom);
$elements = $xpath->query("//*[@name='ElementName']");

foreach ($elements as $node)
{
    $element[] = $node;
}

Теперь $element[0] должен быть элементом, который вы ищете.

person eagle12    schedule 17.12.2011
comment
Арджун не смотрит на атрибуты name, и зачем создавать массив, если работать с DOMNodeList легко? - person salathe; 17.12.2011

Возвращаемое значение из getElementsByTagName() представляет собой объект DOMNodeList, который не является массивом. Доступ к отдельным элементам в списке осуществляется через метод item().

$element = $dom->getElementByTagName('ElementName')->item(0);

Видеть:

person salathe    schedule 17.12.2011
comment
ок, круто, спасибо... теперь я даже знаю о методе item()... спасибо... :D - person Arjun Bajaj; 17.12.2011