如何使用PHP中的SimpleXMLElement更改XML属性(和值)

时间:2016-01-08 11:09:57

标签: php xml

我在设置XML标记的值/属性时遇到了问题。 这是我的PHP代码:

$f=simplexml_load_file("String.xml");
$f2=$f->imgdir;
foreach($f2 as $imgdir)
{
    $st=$imgdir->string;

    foreach($st as $str)
    {
        $fd=$str->attributes();
        $fd['value']='New Value';
    }
}
$f->asXML("String.xml");

这是我的String.xml文件的内容:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<imgdir name="Cash.img">
    <imgdir name="5000011">
        <string name="name" value="Monkey"/>
        <string name="desc" value="A lovely effect that shows a baby angel floating around as your protector.  Designate a HotKey to turn the effect on/off."/>
    </imgdir>
    <imgdir name="5010000">
        <string name="name" value="Sunny Day"/>
        <string name="desc" value="A special effect in which you&apos;ll see a brightly smiling sun floating over you. On the KeyConfig, configure this on a button of your choice to turn the effect on/off."/>
    </imgdir>
</imgdir>

如何更改每个<string>标记的value属性并保存XML文件?我现在的代码该怎么办?

感谢您阅读我的问题!

1 个答案:

答案 0 :(得分:0)

<强>基本

我建议您使用<string>选择所有xpath个节点:

$xml = simplexml_load_string($x); // assume XML in $x
$strings = $xml->xpath("//string");

上述语句会将所有<string>个节点选为SimpleXml元素到数组中 //string中的双斜线将<string>,无论它们在树中的位置如何。

现在迭代$strings并设置新值很简单:

foreach ($strings as $string) 
    $string["value"] = "new value";

请注意,应用于$strings的更改发生在$xml中,因此:

echo $xml-asXML();

将显示更改。

看到它有效:Corresponding Plot

<强>扩展

当然,您可能只想选择某些<string>个节点,例如都有name="name"。在这种情况下,您可以告诉xpath

$strings = $xml->xpath("//string[@name='name']");

请注意[]@name中设置的条件,并引用attribute名称。