-1

我有以下 XML 文件:

<root>
  <SignUp user_id = 'joseph' image = 'myByk.jpg' />
  <SignUp user_id = 'jack' image = 'myCar.jpg' />  
  <SignUp user_id = 'lamp' image = 'myhome.jpg' />
</root>

在此文件中,我想获取带有“ ”的SignUp元素,并更改其属性。user_idjackimage

我尝试了以下 PHP 代码:

<?php
  $dom = new DomDocument();
  $dom->load('data_out.xml');
  $xp = new DomXPath($dom);
  $res = $xp->query("//*[@user_id = 'jack']");
  $xp->SignUp->attributes()->image = "my School.jpg";
  $dom->save('data_out.xml');
?>

但是,它似乎不起作用...

4

2 回答 2

1

由于在查询中您按属性进行,因此您可以有多个结果元素,因此它被包装在某种列表中(dom node list)。

这是我的想法(未经测试):

<?php
    $dom = new DomDocument();
    $dom->load('data_out.xml');
    $xp = new DomXPath($dom);
    $res = $xp->query("//*[@user_id = 'jack']");
    $res->item(0)->setAttribute("image", "my School.jpg");
    $dom->save('data_out.xml');
?>

类似的代码在沙箱中成功测试:

$dom = new DomDocument();
$dom->loadXML(
    "<root>
        <SignUp user_id = 'joseph' image = 'myByk.jpg' />
        <SignUp user_id = 'jack' image = 'myCar.jpg' />  
        <SignUp user_id = 'lamp' image = 'myhome.jpg' />
    </root>"
);
$xp = new DomXPath($dom);
$res = $xp->query("//*[@user_id = 'jack']");
$res->item(0)->setAttribute("image", "my School.jpg");
$ret =  $dom->saveXML();
echo $ret;

返回

<?xml version="1.0"?>
<root>
    <SignUp user_id="joseph" image="myByk.jpg"/>
    <SignUp user_id="jack" image="my School.jpg"/>  
    <SignUp user_id="lamp" image="myhome.jpg"/>
</root>
于 2013-06-01T05:38:44.883 回答
1

那么也许操作应该考虑使用 SimpleXML:

if ($root = simplexml_load_file('xml.xml') ) 
{
    //access attributes like an array:
    echo $root->SignUp[0]["user_id"] . "\n";  

    $target_elements = $root->xpath("//*[@user_id = 'jack']");
    $target_elements[0]["image"] = "mySchool.jpg";
    $root->asXML('datat_out.xml');

}

请注意,要更改属性,您不必使用繁琐的:

$target_attr = "image";
$target_elements[0]->attributes()->$target_attr = "hello";
于 2013-06-01T23:05:32.490 回答