2011-12-17 2 views
0

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

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

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

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

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

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

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

+0

Какая библиотека DOM? DOMDocument? SimpleXML? –

+0

DOMDocument .... –

ответ

3

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

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

+0

спасибо ... он работал безупречно ... –

+0

Arjun не смотрит на атрибуты 'name', и почему нужно строить массив при работе с DOMNodeList? – salathe

2

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

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

См:

+0

ok cool, thanks ... теперь я даже знаю о методе item() ... спасибо ...: D –