PHP, XML: изменение SimpleXMLElement с помощью XPath

Предположим, в переменной $item у нас хранится некий SimpleXMLElement, который мы хотим изменить. Самый прямолинейный способ выглядит примерно так:

$item->subitem->param->value = 'NewValue';

Однако если названия элементов содержат спецсимволы (например, двоеточие), то менять значения таким образом не получится. В таком случае можно экспортировать весь узел из SimpleXMLElement в DOMElement, затем изменить то, что нужно, с помощью XPath и импортировать назад. Пример:

$dom = new DOMDocument();
$dom_sxe = dom_import_simplexml($item);
$dom_sxe = $dom->importNode($dom_sxe, true);
$dom_sxe = $dom->appendChild($dom_sxe);
$xpath = new DOMXPath($dom);

$result = $xpath->query('Element:with:a:funky:name');
$result->item(0)->nodeValue = 'NewValue';

$item = simplexml_import_dom($dom);

Как отсюда видно, элемент с названием, содержащим двоеточия, помехой больше не является.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *