Jump to content

Help with xpath and reading an xml file.


tiki

Recommended Posts

I need a way to grab a certain nodes value and return it, heres an xml file and a class I have, but I get this error, anyone know why or know how to fix it?

 

Parse error: syntax error, unexpected T_OBJECT_OPERATOR in data.php on line 22 (Line 22 is the return of the getName())

 

<?php
require_once("config.php");

class Data {

    var $race;
    var $data;
    var $doc;

    // Load the races xml data
    function Data($race) {
        $this->race = $race;
        
        $this->doc = new DOMDocument;
        $this->doc->load(_LIB_.'/data/'. $this->race .'.xml');
        $this->data = new DOMXPATH($this->doc);
    }
    
    // Gets the name of the unit
    function getName($unit) {
        return $this->data->query('//'. $this->race .'/units/'. $unit .'/node[. = \'name\']')->item(0)->nodeValue; 
    }
}
?> 

 

<?xml version="1.0" encoding="iso-8859-1"?>
<human>
<units>
	<workers>
		<name>Peasant</name>			
		<health>25</health>
		<damage>5</damage>
		<defense>3</defense>
		<gold>70</gold>
		<wood>10</wood>
		<stone>5</stone>
		<iron>15</iron>
		<food>5</food>
		<turns>1</turns>
	</workers>
</units>
</human>

Link to comment
https://forums.phpfreaks.com/topic/45381-help-with-xpath-and-reading-an-xml-file/
Share on other sites

I have a script to read xml file

 

This will o\p in array try it


$arfiles= array("basic2.xml","dataset.xml"); 

foreach($arfiles as $arFile) 
{ 
    echo "<BR>-------------------------------------------------<BR>"; 
    echo "<BR>Parsing ".$arFile."<BR>"; 
    $insXmlParser= new clsXmlParser($arFile); 
     if($aArray=$insXmlParser->Parse()) {
    echo "<pre></pre>";
print_r($aArray);
//echo LIST_CONTENTS($aArray); 
}
    echo "<BR> -------------------------------------------------<BR>"; 
} 
// Simple XML Parser  

class clsXmlParser { 

// general vars 
var $sTitle = ""; 
var $sLink = ""; 
var $sDescription = ""; 
var $arItems = array(); 
var $arsub = array(); 
var $itemCount = 0; 
var $prvTag="";   
var $uFiles = ''; 
var $xml_parser; 
var $curTag=""; 

function clsXmlParser($uFiles) 
{ 
     
    $this->uFiles = $uFiles; 
     
} 

function startElement($parser, $name, $attrs) { 
  
  $this->curTag .= "^$name";   
  //echo "start:  ".$this->curTag." <BR>"; 
  
} 

function endElement($parser, $name) 
{ 
   
  $caret_pos = strrpos($this->curTag,'^'); 
  $this->curTag = substr($this->curTag,0,$caret_pos); 
  //echo "end:  ".$this->curTag." <BR>"; 
} 

function characterData($parser, $data) {  
  
  if(trim($data) != "") 
  { 
        if(trim($this->prvTag) == "") 
              $this->prvTag=$this->curTag; 
      elseif(trim($this->prvTag) == trim($this->curTag)) 
      { 
          $this->arItems[] = $this->arsub; 
          $this->arsub = array(); 
         
        } 
   
        //find current element 
            $c_pos = strrpos($this->curTag,'^'); 
        $c_len = strlen($this->curTag); 
        $c_val = substr($this->curTag,($c_pos+1),$c_len); 

        //set data to sub array with the element name as the key 
        $this->arsub[$c_val] = $data; 
         
       
  } 

} 



function Parse() 
{ 
    $this->xml_parser = xml_parser_create(); 
         
     
    xml_set_object($this->xml_parser, &$this); 
     
    xml_set_element_handler($this->xml_parser, "startElement", "endElement"); 
    xml_set_character_data_handler($this->xml_parser, "characterData"); 
     
    if (!($fp = fopen($this->uFiles,"r")))  
    { 
      die ("could not open XML for input"); 
    } 
     
    while ($data = fread($fp, 4096))  
    { 
      if (!xml_parse($this->xml_parser, $data, feof($fp))) 
      { 
        die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($this->xml_parser)), xml_get_current_line_number($this->xml_parser))); 
      } 
    } 
    xml_parser_free($this->xml_parser); 
         
    //to handle the last array element 
    if(count($this->arsub)>0) 
    { 
         $this->arItems[] = $this->arsub; 
         $this->arsub = array(); 
    } 
         
    return $this->arItems; 

} 

} 

///----------END OF CLASS 


function LIST_CONTENTS($arrayname,$tab="&nbsp&nbsp&nbsp&nbsp",$indent=0)  
    {    
    // recursively displays contents of the array and sub-arrays:  
        // This function (c) Peter Kionga-Kamau  
        // Free for unrestricted use, except sale - do not resell.  
            // use: echo LIST_CONTENTS(array $arrayname, string $tab, int $indent);  
        // $tab = string to use as a tab, $indent = number of tabs to indent result  
        $retval=$currenttab=""; 
        while(list($key, $value) = each($arrayname))  
        {  
               for($i=0; $i<$indent; $i++) $currenttab .= $tab;  
            if (is_array($value))  
            {  
                $retval .= "$currenttab$key : Array: <BR>$currenttab{<BR>";  
                  $retval .= LIST_CONTENTS($value,$tab,$indent+1)."$currenttab}<BR>";  
            }  
               else $retval .= "$currenttab$key => $value<BR>";  
               $currenttab = NULL;  
        }  
        return $retval;  
    }  

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.