note 117959 added to xmlreader.next

From: Date: Tue, 08 Sep 2015 21:48:15 +0000
Subject: note 117959 added to xmlreader.next
Groups: php.notes 
Request: Send a blank email to php-notes+get-203743@lists.php.net to get a copy of this message
This method appears to follow these rules: - if $localName names a sibling node, the cursor is moved to that node; - if $localName names an ancestor node, the cursor is moved to the end of that node; - if $localName names a node that is a sibling of any of the current node's ancestors, the cursor is moved to that node; - otherwise the cursor is moved outside the document. Note especially that this method never moves the cursor to child nodes. For example, given this XML document <?xml version="1.0" encoding="UTF-8"?> <root id="root" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <aaa id="1"> <bbb id="1.1"></bbb> <bbb id="1.2"></bbb> </aaa> <ccc id="2" /> <aaa id="3"> <ddd id="3.1"> <aaa id="3.1.1"></aaa> </ddd> <aaa id="3.2"></aaa> </aaa> <aaa id="4"> <eee id="4.1"></eee> </aaa> </root> going from <root id="root"> to "bbb" places the cursor outside the document; going from <aaa id="1"> to "bbb" places the cursor outside the document; going from <aaa id="1"> to "aaa" places the cursor on <aaa id="3">; going from <bbb id="1.1"> to "bbb" places the cursor on <bbb id="1.2">; going from <bbb id="1.2"> to "bbb" places the cursor outside the document; going from <bbb id="1.1"> to "ddd" places the cursor outside the document; going from <bbb id="1.1"> to "aaa" places the cursor on </aaa>; going from <bbb id="1.1"> to "ccc" places the cursor on <ccc id="2">; going from <bbb id="1.1"> to "nonsuch" places the cursor outside the document; going from <bbb id="1.1"> to "root" places the cursor on </root>; going from <ddd id="3.1"> to "aaa" places the cursor on <aaa id="3.2">; going from <ddd id="3.1"> to "eee" places the cursor outside the document; Try it yourself: <?php $document = <<<XML <?xml version="1.0" encoding="UTF-8"?> <root id="root" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <aaa id="1"> <bbb id="1.1"></bbb> <bbb id="1.2"></bbb> </aaa> <ccc id="2" /> <aaa id="3"> <ddd id="3.1"> <aaa id="3.1.1"></aaa> </ddd> <aaa id="3.2"></aaa> </aaa> <aaa id="4"> <eee id="4.1"></eee> </aaa> </root> XML; $filename = "/tmp/xmlreader.php.xml"; file_put_contents($filename, $document); echo "given this XML document\n\n$document\n\n"; showNext("root", "bbb"); showNext("1", "bbb"); showNext("1", "aaa"); showNext("1.1", "bbb"); showNext("1.2", "bbb"); showNext("1.1", "ddd"); showNext("1.1", "aaa"); showNext("1.1", "ccc"); showNext("1.1", "nonsuch"); showNext("1.1", "root"); showNext("3.1", "aaa"); showNext("3.1", "eee"); function showNext($from, $to) { global $filename; $xml = new \XmlReader(); $xml->open("file://$filename"); while ($xml->read()) { if ($xml->nodeType === \XmlReader::ELEMENT) { if ($xml->getAttribute("id") == $from) { echo "going from <$xml->name id=\"$from\">"; break; } } } $xml->next($to); $destination = ""; if($xml->nodeType === \XmlReader::NONE) { if(!$xml->read()) { $destination = "outside the document"; } } if(!$destination) { if ($xml->nodeType === \XmlReader::END_ELEMENT) { $destination = "on </$xml->name>"; } else if ($xml->nodeType === \XmlReader::ELEMENT) { $destination = "on <$xml->name id=\"" . $xml->getAttribute("id") . "\">"; } } echo " to \"$to\" places the cursor $destination;\n"; $xml->close(); } ?> ---- Server IP: 72.52.91.14 Probable Submitter: 184.162.125.97 ---- Manual Page -- http://php.net/manual/en/xmlreader.next.php Edit -- https://master.php.net/note/edit/117959 Del: integrated -- https://master.php.net/note/delete/117959/integrated Del: useless -- https://master.php.net/note/delete/117959/useless Del: bad code -- https://master.php.net/note/delete/117959/bad+code Del: spam -- https://master.php.net/note/delete/117959/spam Del: non-english -- https://master.php.net/note/delete/117959/non-english Del: in docs -- https://master.php.net/note/delete/117959/in+docs Del: other reasons-- https://master.php.net/note/delete/117959 Reject -- https://master.php.net/note/reject/117959 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#203743) next »