[英]how to set xml attribute value change if xml element name is same
I have the following XML file:我有以下 XML 文件:
<root>
<SignUp user_id = 'joseph' image = 'myByk.jpg' />
<SignUp user_id = 'jack' image = 'myCar.jpg' />
<SignUp user_id = 'lamp' image = 'myhome.jpg' />
</root>
Within this file I want to get the SignUp
element with the user_id
" jack
", and change its image
attribute.在此文件中,我想获取
user_id
“ jack
”的SignUp
元素,并更改其image
属性。
I have tried the following PHP code:我尝试了以下 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');
?>
However, it doesn't seem to be working...然而,它似乎不起作用......
Since in the query you are going by attribute you can have multiple result elements so it is wrapped in a list of some sort ( dom node list ).由于在查询中您是按属性进行的,因此您可以有多个结果元素,因此它被包装在某种列表中( dom 节点列表)。
Here is what I am thinking (untested):这是我的想法(未经测试):
<?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');
?>
Similar code successfully tested in a sandbox :类似的代码在沙箱中成功测试:
$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;
returns返回
<?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>
Then perhaps the op should consider using SimpleXML:那么操作人员也许应该考虑使用 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');
}
Note that to change an attribute, you don't have to use the cumbersome:请注意,要更改属性,您不必使用繁琐的:
$target_attr = "image";
$target_elements[0]->attributes()->$target_attr = "hello";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.