0

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

<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?)
     }
}
4

2 回答 2

1

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

$xmlElement->{0} = $values[$indexOfName];
于 2012-04-15T10:42:07.327 回答
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();

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

于 2012-04-15T13:07:14.300 回答