#37669 [Opn->Asn]: Setting a node's value from array returned by xpath does not work

From: Date: Tue, 20 Jun 2006 14:25:24 +0000
Subject: #37669 [Opn->Asn]: Setting a node's value from array returned by xpath does not work
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-98563@lists.php.net to get a copy of this message
ID: 37669 Updated by: tony2001@php.net Reported By: justinpatrin@php.net -Status: Open +Status: Assigned Bug Type: SimpleXML related Operating System: Linux (Gentoo, RHEL) PHP Version: 5.1.4 -Assigned To: +Assigned To: helly New Comment: Marcus, could you pla take a look at it? Previous Comments: ------------------------------------------------------------------------ [2006-06-02 04:39:49] justinpatrin@php.net I've come up with a workaround which imports the SimpleXML obkect into DOM and then converts back, but this, of course, defeats the purpose of SimpleXML. For reference I will post it here for others who need a solution to this problem: $domnode = dom_import_simplexml($xml); $dom = new DOMDocument(); $domnode = $dom->importNode($domnode, true); $dom->appendChild($domnode); $x = new DOMXPath($dom); $n = $x->evaluate('/root/node'); while ($n->item(0)->firstChild) { $n->item(0)->removeChild($n->firstChild); } $n->item(0)->appendChild($dom->createTextNode('World')); $xml = simplexml_import_dom($dom); ------------------------------------------------------------------------ [2006-06-02 00:44:25] justinpatrin@php.net Description: ------------ When trying to set the value (inside text) of a node from an array returned from an xpath call nothing happens. Setting an attribute works fine, however. Setting via normal -> access works as expected. Reproduce code: --------------- $xml = simplexml_load_string('<root><node/><node2/></root>'); if (is_array($nodes = $xml->xpath('node')) && sizeof($nodes) > 0 && is_object($nodes[0])) { $nodes[0]['value'] = 'Hello'; $nodes[0] = 'World'; } $xml->node2 = 'World'; header('Content-Type: text/xml'); echo $xml->asXML(); Expected result: ---------------- <root><node value="Hello">World</node><node2>World</node2></root> Actual result: -------------- <root><node value="Hello"/><node2>World</node2></root> ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=37669&edit=1

« previous php.bugs (#98563) next »