XMLReader
在线手册:中文  英文

简介

The XMLReader extension is an XML Pull parser. The reader acts as a cursor going forward on the document stream and stopping at each node on the way.

编码

It is important to note that internally, libxml uses the UTF-8 encoding and as such, the encoding of the retrieved contents will always be in UTF-8 encoding.


XMLReader
在线手册:中文  英文

用户评论:

dale (2012-07-02 00:11:42)

This is a very basic function based on some of the code from other users, it will find all the elements within the node $wrapperName, store them as an associative array and pass that array to the function $callback.

Its useful for processing large files like product datafeeds for example where all information about each record is enclosed within a single wrapper tag.

For Example:

<product>
<name>someproduct</name>
<brand>somebrand</brand>
<price>someprice</price>
</product>
<product>
<name>someproduct</name>
<brand>somebrand</brand>
<price>someprice</price>
</product>

Variables:
$file - The XML file to parse.
$wrapperName - The name of the parent node for each record.
$callback - The callback function.
$limit - The number of positive (TRUE) returns from the callback function before parsing terminates (otherwise the entire file is parsed).

<?php
function xmlParse($file,$wrapperName,$callback,$limit=NULL){
    
$xml = new XMLReader();
    if(!
$xml->open($file)){
        die(
"Failed to open input file.");
    }
    
$n=0;
    
$x=0;
    while(
$xml->read()){
        if(
$xml->nodeType==XMLReader::ELEMENT && $xml->name == $wrapperName){
            while(
$xml->read() && $xml->name != $wrapperName){
                if(
$xml->nodeType==XMLReader::ELEMENT){
                    
$name $xml->name;
                    
$xml->read();
                    
$value $xml->value;
                    if(
preg_match("/[^\s]/",$value)){
                        
$subarray[$name] = $value;
                    }
                }
            }
            if(
$limit==NULL || $x<$limit){
                if(
$callback($subarray)){
                    
$x++;
                }
                unset(
$subarray);
            }
            
$n++;
        }
    }
    
$xml->close();
}
?>

Sample Usage:

xmlParse($somefile,'item_data','callback');

For XML $somefile formatted as:
<item_data>
<info1>inf1value</info1>
<info2>inf2value</info2>
<info3>inf3value</info3>
</item_data>
<item_data>
<info1>inf1value</info1>
<info2>inf2value</info2>
<info3>inf3value</info3>
</item_data>
<item_data>
<info1>inf1value</info1>
<info2>inf2value</info2>
<info3>inf3value</info3>
</item_data>

will send the following array to the callback function for each item where it can be processed and added to a database etc.:

Array(
info1 => inf1value,
info2 => inf2value,
info3 => inf3value
)

Sample Callback Function:

<?php
function callback($array){
    
//condition and action for positive validation (increments parser limit)
    
if($array['info1']!="Out Of Stock"){
        
/*add to database*/
        
return TRUE;
    }
    else {
        return 
FALSE;
    }
}
?>

易百教程