note 117959 added to xmlreader.next
| From: | ppp dot BOTSNEEDNOTAPPLY at salesfloor dot net | 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