tiki Posted April 3, 2007 Share Posted April 3, 2007 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 More sharing options...
jitesh Posted April 3, 2007 Share Posted April 3, 2007 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="    ",$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; } Link to comment https://forums.phpfreaks.com/topic/45381-help-with-xpath-and-reading-an-xml-file/#findComment-220351 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.