SimpleXMLElement如何更改标签内容(值)

时间:2012-04-15 10:33:15

标签: php xml-parsing simplexml

我需要知道如何更改标签的内容(不是属性,只是内容)。我不需要这个父标签内的内部标签。我只需要在里面放一些文字。 (替换下一个xml文件的“1. Hello World”):

<config name="THIS" type="string">1. Hello World)</config>
<config name="IS" type="string">2. Hello World!</config>
<config name="SPARTA" type="string">3. Hello World?</config>

// create simple xml object
$xml = new SimpleXMLElement(file_get_contents('file.xml'));

// new names and values
$names  = array('THIS', 'SPARTA');
$values = array('1. Good bye world(', '3. Good bye world?');

// replace here
foreach($xml as $a => $xmlElement) {
     $indexOfName = array_search($names, (string)$xmlElement['name']);
     if ($indexOfName !== false) {
          // here I need to replace the value (e.g. 1. Hello World)) of config
          // with the attribute @name == $names[$i] with the new value
          // $values[$i] (3. Good bye world?)
     }
}

2 个答案:

答案 0 :(得分:1)

通常,您需要父元素,或者如果您知道父元素的结构,则可以尝试使用xpath。除此之外,你可能想尝试这个黑客:

$xmlElement->{0} = $values[$indexOfName];

答案 1 :(得分:1)

我找到了临时解决方案。它创建一个新的简单xml并从当前简单的xml中复制所有内容并替换内容值

$newXml = new SimpleXMLElement('<' . $xml->getName() . '></' . $xml->getName() . '>');
foreach($xml as $a => $xmlElement) {
    $attr = $newXml->addChild($a, 'New content of the tag');
    foreach($xmlElement->attributes() as $k => $v) {
        $attr->addAttribute($k, $v);
    }
}
echo $newXml->asXML();

然而它是暂时的。我希望如果有人能够提供更好的解决方案