<?php

$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
        <title>     Ms.</title> 
        <firstname>Jane</firstname>
        <lastname>Jones</lastname>
    </name>
</ENTRY>
XMLDOC;
if (isset($_SERVER['REMOTE_ADDR']) || $argc > 1) {
    echo "<pre>";
    echo preg_replace('/</', '&lt;', $doc);
    echo "\n<hr>\n";
}
XML_PullParser_excludeBlanks(true);
XML_PullParser_trimCdata(true);
$tags = array("entry");
$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 &lt;ENTRY>. . .&lt;/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++) {
<?php

$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());
while ($token = $parser->XML_PullParser_getToken()) {
    //    $attributes = $parser->XML_PullParser_getAttrValues(array("server"=>"Entry"));
    $attributes = $parser->XML_PullParser_getAttrValues(array("server" => $token));
    foreach ($attributes as $attr) {
        foreach ($attr as $attr_name => $attr_value) {
            echo "{$attr_name} => {$attr_value}\n";
        }
        echo "\n";
    }
}
/*
  Result
        IP => 192.168.10.1
        REGISTRANT => example.com

        IP => 192.168.10.2
Example #4
0
  <sort type="non" />
  <mappings>
    <map src="b" dest="2" />
    <map src="&lt;" 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);
Example #5
0
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();
}
require_once "XML_PullParser.inc";
$doc = '<ENTRY> 
<ipaddress>172.20.19.6  </ipaddress> 
<domain> example.com  </domain> 
<server ip="192.168.10.1">
example_1.com 
<registrant>mturner.org </registrant>
</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>';
$tags = array("Entry");
$child_tags = array("server");
$parser = new XML_PullParser_doc($doc, $tags, $child_tags);
while ($token = $parser->XML_PullParser_getToken()) {
    $servers = $parser->XML_PullParser_getElement('server');
    $servers = $parser->XML_PullParser_childXCL($servers);
    $seq = $parser->XML_PullParser_getSequence($servers);
    for ($i = 0; $i < count($seq); $i++) {
        list($server, $which) = each($seq[$i]);
        $name = $parser->XML_PullParser_getText($server, $which);
        echo "Name: {$name} \n";
        $ip = $parser->XML_PullParser_getAttributes($server, $which);
        echo "\tIP: " . $parser->XML_PullParser_getAttrVal('ip', $ip) . "\n";
    }
}
/*
 Result
Name:
<?php

$topsecret = '
<Confidential_report>
<item>
The company has a ground-breaking new product called <emphasis>Ground-breaker.</emphasis>
</item>
<topsecret>Its formula is H20</topsecret>
<item>We expect to begin selling it by the end of the year.</item>
</Confidential_report>';
require_once "XML_PullParser.inc";
$tags = array("Confidential_report");
$child_tags = array();
XML_PullParser_trimCdata(true);
XML_PullParser_excludeBlanks(true);
$parser = new XML_PullParser_doc($topsecret, $tags, $child_tags);
$token = $parser->XML_PullParser_getToken();
$classified = $parser->XML_PullParser_childXCL($token, "topsecret");
$old_delim = $parser->XML_PullParser_setDelimiter("\n");
echo $parser->XML_PullParser_getTextStripped($classified) . "\n";
$parser->XML_PullParser_setDelimiter($old_delim);
/* Result
        The company has a ground-breaking new product called
        Ground-breaker.
        We expect to begin selling it by the end of the year.
*/
        <title>     Ms.</title> 
        <firstname>Jane</firstname>
        <lastname>Jones</lastname>
    </name>
</ENTRY>
XMLDOC;
if (isset($_SERVER['REMOTE_ADDR']) || $argc > 1) {
    echo "<pre>";
    echo preg_replace('/</', '&lt;', $doc);
    echo "\n<hr>\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 &lt;ENTRY>. . .&lt;/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)