使用 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==data2
和 child4==data4
,如下所示:
$query = "//*[@ID=444]//*['data2' and 'data4']";
$result = $xml->xpath($query);
它运行良好。但是现在,我想在找到匹配后更新 data1
和 data3
,仅使用 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);
我有一个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==data2
和 child4==data4
,如下所示:
$query = "//*[@ID=444]//*['data2' and 'data4']";
$result = $xml->xpath($query);
它运行良好。但是现在,我想在找到匹配后更新 data1
和 data3
,仅使用 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
, wherechild2==data2
andchild4==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);