$doc = '<DNS> <ENTRY> <ipaddress type="primary">172.20.19.6 </ipaddress> <server ip="192.168.10.1" registrant="example.com"> example_1.com </server> <server ip="192.168.10.2"> example_2.com </server> <server ip="192.168.10.3"> example_3.com </server> <alias> www.example.com </alias> </ENTRY> </DNS> '; require_once "XML_PullParser.inc"; $parser = new XML_PullParser_doc($doc, array("Entry"), array('server')); while ($token = $parser->XML_PullParser_getToken()) { $parser->XML_PullParser_getElement('server'); $parser->XML_PullParser_setAttrLoop(); while ($attr = $parser->XML_PullParser_nextAttr()) { foreach ($attr[1] as $attr_name => $attr_value) { echo "{$attr['0']}: {$attr_name} => {$attr_value}\n"; } echo "\n"; } } // echo XML_PullParser_Errors_Trace() . "\n"; /* Result SERVER: IP => 192.168.10.1 SERVER: REGISTRANT => example.com SERVER: IP => 192.168.10.2
$child_tags = array("name", "lastname"); $parser = new XML_PullParser_doc($doc, $tags, $child_tags); $entry = $parser->XML_PullParser_getToken(); // the default token here will be $entry echo "Getting lastname\n"; echo "Using token from XML_PullParser_getToken(), i.e <ENTRY>. . .</ENTRY>\n"; printf("%20s %4s %-8s %s\n", "\$el ", "\$which", " \$xcl", "Result"); for ($i = 0; $i < 4; $i++) { display_result("lastname", $i); } echo "\nUsing token from XML_PullParser_getElement('name')\n"; printf("%20s %4s %-8s %s\n", "\$el ", "\$which", " \$xcl", "Result"); /* the default token will be $parser->current_element, which will be an array consisting of 'name' elements and their descendents */ $parser->XML_PullParser_getElement('name'); for ($i = 0; $i < 4; $i++) { display_result("lastname", $i); } echo "\nUsing token from XML_PullParser_getElement('lastname')\n"; printf("%20s %4s %-8s %s\n", "\$el ", "\$which", " \$xcl", "Result"); /* the default token will be $parser->current_element, which will be an array consisting of 'lastname' elements -- unlike 'name' it has no descendents */ $last_name = $parser->XML_PullParser_getElement('lastname'); for ($i = 0; $i < 4; $i++) { display_result("lastname", $i); } function display_result($el, $which) { global $parser;
function get_array() { XML_PullParser_excludeBlanks(true); XML_PullParser_trimCdata(true); global $doc, $fn_names; $tags = array("simplelist"); $child_tags = array('member'); $parser = new XML_PullParser_doc($doc, $tags, $child_tags); while ($token = $parser->XML_PullParser_getToken()) { $parser->XML_PullParser_getElement('member'); $which = 1; while ($member = $parser->XML_PullParser_getText('member', $which)) { if (preg_match('/XML_PullParser(_\\w+)\\W/', $member, $matches)) { $fn_names[$matches[1]] = array(); } $which++; } } $parser->XML_PullParser_free(); }
<map src="<" dest="6" /> <map src="bc" dest="$1" /> <map src="e" dest="3" /> <map src="abd" dest="*" /> <map src="ad" dest="@" /> <map src="abd" dest="*" /> <map src="ad" dest="@" /> </mappings> </keymap>'; echo "\$which technique\n"; $tags = array("keymap"); $child_tags = array("map"); $parser = new XML_PullParser_doc($doc, $tags, $child_tags); $token = $parser->XML_PullParser_getToken(); $which = 1; $maps = $parser->XML_PullParser_getElement('map'); while ($map = $parser->XML_PullParser_getAttributes($maps, $which)) { echo "src => " . $map['SRC'] . "\n"; // attribute names must use caps since case-folding is in effect echo "dest => " . $map['DEST'] . "\n\n"; $which++; } echo "\nXML_PullParser_nextElement technique\n"; while ($server = $parser->XML_PullParser_nextElement()) { $attr_array = $parser->XML_PullParser_getAttributes($server); $src = $parser->XML_PullParser_getAttrVal("src", $attr_array); // method takes case-folding into account $dest = $parser->XML_PullParser_getAttrVal("dest", $attr_array); echo "src: {$src}, dest: {$dest}\n"; } echo "\n";
} XML_PullParser_excludeBlanks(true); XML_PullParser_trimCdata(true); $tags = array("entry"); $child_tags = array("name"); $parser = new XML_PullParser_doc($doc, $tags, $child_tags); $entry = $parser->XML_PullParser_getToken(); echo "Using token from XML_PullParser_getToken(), i.e <ENTRY>. . .</ENTRY>\n"; printf("%20s %4s %-8s %s\n", "\$el ", "\$which", " \$xcl", "Result"); for ($i = 0; $i < 6; $i++) { display_result($entry, $i); display_result("name", $i); } echo "\nUsing token from XML_PullParser_getElement('name')\n"; printf("%20s %4s %-8s %s\n", "\$el ", "\$which", " \$xcl", "Result"); $name = $parser->XML_PullParser_getElement('name'); for ($i = 0; $i < 6; $i++) { display_result($name, $i); display_result("name", $i); } function display_result($el, $which) { global $parser; $type = ""; if (is_array($el)) { $token = $parser->XML_PullParser_getElementName($el); $type = "token({$token})"; } else { $name = $el; $type = "string({$name})"; }