Jump to content

XML Parser


mithu_sree

Recommended Posts

<?php$file="http://www.URL.com/file.XML";$xml_parser = xml_parser_create();$handle = fopen($file, "rb");$contents = '';while (!feof($handle)) {  $data .= fread($handle, 8192);}fclose($handle);xml_parse_into_struct($xml_parser, $data, $vals, $index);xml_parser_free($xml_parser);$params = array();$level = array();foreach ($vals as $xml_elem) {  if ($xml_elem['type'] == 'open') {   if (array_key_exists('attributes',$xml_elem)) {	 list($level[$xml_elem['level']],$extra) = array_values($xml_elem['attributes']);   } else {	 $level[$xml_elem['level']] = $xml_elem['tag'];   }  }  if ($xml_elem['type'] == 'complete') {   $start_level = 1;   $php_stmt = '$params';   while($start_level < $xml_elem['level']) {	 $php_stmt .= '[$level['.$start_level.']]';	 $start_level++;   }   $php_stmt .= '[$xml_elem[\'tag\']] = $xml_elem[\'value\'];';   eval($php_stmt);  }}echo "<pre>";print_r ($params);echo "</pre>";?>

This code is from http://www.php.net/manual/en/function.xml-...into-struct.phplet this one be the input<?xml version="1.0"?><moldb> <molecule> <name>Alanine</name> <symbol>ala</symbol> <code>A</code> <type>hydrophobic</type> </molecule> <molecule> <name>Lysine</name> <symbol>lys</symbol> <code>K</code> <type>charged</type> </molecule></moldb>The parser not parsing the second <molecule> tag.What should I do to work the code correctly?

Link to comment
Share on other sites

WOW. Unless you're using PHP4, I suggest you try out the DOM Functions. They are much easier to set up and debug. Besides, what do you mean by "parse"? With the DOM functions, "parse" would mean "select" but then you'd do something :) .TIP: Begin with the evaluate() function and after you feel comfortable using XPath, go to query(). Then use item() alongside the rest of the functions to do something with the selected item() from the query() results.

Link to comment
Share on other sites

I'm trying to parse RSS files. I just want to know is there a function like javascript innerHTML() in PHP$titles = $dom->getElementsByTagName('title');foreach ($titles as $title) { echo $param->.......'<br>'; // I want to get the contents inside <title> tags}

Link to comment
Share on other sites

DOM results are not saved as arrays. They are saved as DOM objects you then refer to with item(). Values of properties (in the example below, that's "length") are an exclusion to this rule. They are most often strings instead.Try something like

$titles = $dom->getElementsByTagName('title');for ($i=0; $i<=$titles->length; $i++){echo $titles->item($i) . '<br>';}

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...