使用 SimpleXML API 更新 XML 节点值

Updating XML node value with SimpleXML API

我有一个XML结构:

<root>
   <!-- ... -->
   <B ID="444">
        <C></C>  
        <D>Anything</D>
        <E>
            <child1 /*expected outcome came in here*/> /*sometimes here*/ </child1>
            <child2>data2 <!-- instead of here --></child2>
            <child3>data3</child3>
            <child4>data4 /* and also here instead*/ </child4>
        </E>
    </B>
   <!-- ... -->
</root>

我进行了 XPath 查询以获取 //*B,其中 child2==data2child4==data4,如下所示:

$query = "//*[@ID=444]//*['data2' and 'data4']";
$result = $xml->xpath($query);

它运行良好。但是现在,我想在找到匹配后更新 data1data3,仅使用 simplexml API。这是我所做的,但它无法正常工作:

if(!empty($result)){
    $result[0]['data2'] = "Blabla";
    $result[0]['data4'] = "Blaaaaaaaa";
    return $xml->saveXML($File;
}

我做错了什么?或者如何使用 simplexml 更好地完成?任何想法将不胜感激。

I made an XPath query to fetch //*B, where child2==data2 and child4==data4, like this:

$query = "//*[@ID=444]//*['data2' and 'data4']";

那已经错了。您认为您的尝试将 child2'data2'child4'data4' 进行了哪些比较?

更好:

$query = "//B[@ID = 444 and .//child2 = 'data2' and .//child4 = 'data4']";
$result = $xml->xpath($query);

foreach ($result as $b) {
    // find first <child2> and <child4> descendants
    $child2 = $b->xpath(".//child2")[0];
    $child4 = $b->xpath(".//child4")[0];

    // set their text values
    $child2[0] = "Blabla";
    $child4[0] = "Blaaaaaaaa";
}

return $xml->saveXML($File);

http://ideone.com/lXtvbP