<?php
$xmlstr = <<<EOF
<root>
<!-- ... -->
<B ID="444">
<C></C>
<D>Anything</D>
<E>
<child1>foo</child1>
<child2>data2</child2>
<child3>data3</child3>
<child4>data4</child4>
</E>
</B>
<!-- ... -->
</root>
EOF;
$xml = new SimpleXMLElement($xmlstr);
$query = "//B[@ID = 444 and .//child2 = 'data2' and .//child4 = 'data4']";
$result = $xml->xpath($query);
$dirty = False;
foreach ($result as $b) {
$child2 = $b->xpath(".//child2")[0];
$child4 = $b->xpath(".//child4")[0];
echo (string)$child2;
echo (string)$child4;
$child2[0] = "Blabla";
$child4[0] = "Blaaaaaaaa";
$dirty = True;
}
if ($dirty) {
// $xml->saveXML($File);
}
echo $xml->saveXML();
?>
PD9waHAKCiAgICAkeG1sc3RyID0gPDw8RU9GCjxyb290PgogICA8IS0tIC4uLiAtLT4KICAgPEIgSUQ9IjQ0NCI+CiAgICAgICAgPEM+PC9DPiAgCiAgICAgICAgPEQ+QW55dGhpbmc8L0Q+CiAgICAgICAgPEU+CiAgICAgICAgICAgIDxjaGlsZDE+Zm9vPC9jaGlsZDE+CiAgICAgICAgICAgIDxjaGlsZDI+ZGF0YTI8L2NoaWxkMj4KICAgICAgICAgICAgPGNoaWxkMz5kYXRhMzwvY2hpbGQzPgogICAgICAgICAgICA8Y2hpbGQ0PmRhdGE0PC9jaGlsZDQ+CiAgICAgICAgPC9FPgogICAgPC9CPgogICA8IS0tIC4uLiAtLT4KPC9yb290PgpFT0Y7CgoJJHhtbCA9IG5ldyBTaW1wbGVYTUxFbGVtZW50KCR4bWxzdHIpOwogICAgJHF1ZXJ5ID0gIi8vQltASUQgPSA0NDQgYW5kIC4vL2NoaWxkMiA9ICdkYXRhMicgYW5kIC4vL2NoaWxkNCA9ICdkYXRhNCddIjsKICAgICRyZXN1bHQgPSAkeG1sLT54cGF0aCgkcXVlcnkpOwogICAgJGRpcnR5ID0gRmFsc2U7CgogICAgZm9yZWFjaCAoJHJlc3VsdCBhcyAkYikgewogICAgICAgICRjaGlsZDIgPSAkYi0+eHBhdGgoIi4vL2NoaWxkMiIpWzBdOwogICAgICAgICRjaGlsZDQgPSAkYi0+eHBhdGgoIi4vL2NoaWxkNCIpWzBdOwogICAgICAgIAogICAgCWVjaG8gKHN0cmluZykkY2hpbGQyOwogICAgCWVjaG8gKHN0cmluZykkY2hpbGQ0OwogICAgCQogICAgICAgIAoKICAgICAgICAkY2hpbGQyWzBdID0gIkJsYWJsYSI7CiAgICAgICAgJGNoaWxkNFswXSA9ICJCbGFhYWFhYWFhIjsKCiAgICAgICAgJGRpcnR5ID0gVHJ1ZTsKICAgIH0KCiAgICBpZiAoJGRpcnR5KSB7CiAgICAgICAgLy8gJHhtbC0+c2F2ZVhNTCgkRmlsZSk7CiAgICB9CgogICAgZWNobyAkeG1sLT5zYXZlWE1MKCk7Cj8+