У меня есть XML-файл, который выглядит так.
<collections id="my collections"> <category id="my category"> <record id="my record"> <title>Some Info</title> </record> </category> </collections>
Я ищу, чтобы заменить любой атрибут в вышеуказанном XML-файле новым атрибутом, используя PHP DOM и Xpath. Любая помощь высоко ценится
Не уверен, что вы хотите сделать точно, но общая идея:
DOMDocument
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');