SigServer DEV: Difference between revisions

3,207 bytes added ,  12 February 2007
no edit summary
No edit summary
Line 78: Line 78:


The mylist export documentation may be helpful in understanding the meaning of the different fields in the XML replies: [[Mylist_export_template_guidelines]]
The mylist export documentation may be helpful in understanding the meaning of the different fields in the XML replies: [[Mylist_export_template_guidelines]]
==XML Parsing==
To use the XML replies from the server, they have to be parsed and probably cached.
To parse the XML, standard php-commands can be used.
working example for xml.xml with the output array stack().:
{|  width="70%"
|<pre><nowiki>
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//Load and parse XML
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$file = "xml.xml";
$stack = array();
// start_element_handler ( resource parser, string name, array attribs )
function startElement($parser, $name, $attribs)
{
  global $stack;
  $tag=array("name"=>$name,"attribs"=>$attribs);
  array_push($stack,$tag);
}
// end_element_handler ( resource parser, string name )
function endElement($parser, $name)
{
  global $stack;
  $stack[count($stack)-2]['children'][] = $stack[count($stack)-1];
  array_pop($stack);
}
// handler ( resource parser, string data )
function characterData($parser, $data)
{
  global $stack,$i;
 
 
  if(trim($data))
  {
            $stack[count($stack)-1]['data'] .= $data;
  }
}
// handler ( resource parser, string target, string data )
function defaultHandler($parser, $data)
{
 
}
function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId,
                                $publicId) {
  if ($systemId) {
      if (!list($parser, $fp) = new_xml_parser($systemId)) {
          printf("Could not open entity %s at %s\n", $openEntityNames,
                  $systemId);
          return false;
      }
      while ($data = fread($fp, 4096)) {
          if (!xml_parse($parser, $data, feof($fp))) {
              printf("XML error: %s at line %d while parsing entity %s\n",
                      xml_error_string(xml_get_error_code($parser)),
                      xml_get_current_line_number($parser), $openEntityNames);
              xml_parser_free($parser);
              return false;
          }
      }
      xml_parser_free($parser);
      return true;
  }
  return false;
}
function new_xml_parser($file)
{
  global $parser_file;
  $xml_parser = xml_parser_create();
 
  xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);
 
  xml_set_processing_instruction_handler($xml_parser, "PIHandler");
 
  xml_set_element_handler($xml_parser, "startElement", "endElement");
 
  xml_set_character_data_handler($xml_parser, "characterData");
 
  xml_set_default_handler($xml_parser, "defaultHandler");
 
  xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler");
  if (!($fp = @fopen($file, "r"))) {
      return false;
  }
  if (!is_array($parser_file)) {
      settype($parser_file, "array");
  }
  $parser_file[$xml_parser] = $file;
  return array($xml_parser, $fp);
}
if (!(list($xml_parser, $fp) = new_xml_parser($file))) {
  die("could not open XML input");
}
//ERROR
while ($data = fread($fp, 4096)) {
  if (!xml_parse($xml_parser, $data, feof($fp))) {
      die(sprintf("XML error: %s at line %d\n",
                  xml_error_string(xml_get_error_code($xml_parser)),
                  xml_get_current_line_number($xml_parser)));
  }
}
//END
xml_parser_free($xml_parser);
</nowiki></pre>
|}
2

edits

MediaWiki spam blocked by CleanTalk.
MediaWiki spam blocked by CleanTalk.