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

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

2 голосов
/ 27 апреля 2010

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

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

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

Ответы [ 2 ]

5 голосов
/ 27 апреля 2010

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

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


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

<code>$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()) . '
';


Это заменит атрибут 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>
1 голос
/ 13 сентября 2012

Suposing 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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...