修改XML属性PHP DOM

时间:2010-04-27 18:16:14

标签: php xml

我有一个看起来像这样的XML文件。

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

我正在寻找使用新的属性,使用PHP DOM和Xpath替换上述XML文件中的任何属性。 任何帮助都非常感谢

2 个答案:

答案 0 :(得分:5)

不确定你想要做什么,但一般的想法是:


例如,您可以使用以下内容:

$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>

答案 1 :(得分:1)

使用id ='my record'在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');