Изменить атрибут XML PHP DOM

У меня есть XML-файл, который выглядит так.

<collections id="my collections"> <category id="my category"> <record id="my record"> <title>Some Info</title> </record> </category> </collections> 

Я ищу, чтобы заменить любой атрибут в вышеуказанном XML-файле новым атрибутом, используя PHP DOM и Xpath. Любая помощь высоко ценится

Related of "Изменить атрибут XML PHP DOM"

Не уверен, что вы хотите сделать точно, но общая идея:

  • Вы должны DOMDocument
  • и загрузите XML-строки: DOMDocument::loadXML
  • Затем вы должны DOMXpath в этом документе
  • И используйте его для запроса документа: DOMXPath::query
  • Один из них вы нашли узел, который вас интересует, вы можете манипулировать им
    • например, вы можете установить значение атрибута: DOMElement::setAttribute

Здесь, например, вы можете использовать что-то вроде этого:

 $str = <<<XML <collections id="My Collections"> <category id="my category"> <record id="my record"> <title>Some Info</title> </record> </category> </collections> XML; $dom = new DOMDocument(); $dom->loadXML($str); $xpath = new DOMXPath($dom); $elements = $xpath->query('//record[@id="my record"]'); if ($elements->length >= 1) { $element = $elements->item(0); $element->setAttribute('id', "glop !"); } echo '<pre>' . htmlspecialchars($dom->saveXML()) . '</pre>'; 

Это заменит атрибут id my record на идентифицированном им узле « glop ! », И вы получите следующий XML в качестве вывода:

 <?xml version="1.0"?> <collections id="My Collections"> <category id="my category"> <record id="glop !"> <title>Some Info</title> </record> </category> </collections> 

Допустим, id = 'моя запись' уникальна в xml. Трудная работа выполняется только в выражении xpath.

  $dom = new DomDocument(); $dom->load('test.xml'); $xp = new DomXPath($dom); $res = $xp->query("//*[@id = 'my record']"); $res->item(0)->setAttribute('id','2'); $dom->save('test.xml');