Mario Enrico Ragucci: XML-Parser: zuviele Array-Einträge??

Beitrag lesen

Hallo,

ich habe folgende Aufgabenstellung:

  • Auswertung einer XML-Datei nach Location eines Anrufers.

Die XML-Datei ist so aufgebaut:
<data>
<entity key="563019801" caption="Service call">
<group caption="R3">
<field key="C0" caption="Priority" type="Entity Reference" width="96pt" align="left">Priorität</field>
<field key="C1" caption="To deadline" type="Duration" width="95pt" align="right">DEADLINE</field>
<field key="C2" caption="Service  " type="String 80 (Text)" width="96pt" align="left">SERVICE</field>
<field key="C4" caption="Configuration Item Name:" type="String 255 (Description)" width="96pt" align="left">ITEM</field>
<field key="C5" caption="Open duration" type="Duration" width="96pt" align="right">DAUER</field>
<field key="C6" caption="Caller Location  " type="String 50 uppercase (Searchcode)" width="96pt" align="left">STANDORT</field>
<field key="C7" caption="Organization  " type="String 50 (Name)" width="96pt" align="left">Organisation</field>
</group></entity>

Meine PHP-Dateien sehen so aus:
libraries.inc.php
<?php

$duration  = array();
 $location  = array();
 $application         = array();
 $service  = array();
 $flag   = NULL;

function opening_element($parser, $element, $attributes)
 {
  global $flag;

if($element == 'field')
  {
   $flag = $attributes['caption'];
  }
 }

function closing_element($parser, $element)
 {
  if($element == 'field')
  {
   $flag = NULL;
  }
 }

function character_data($parser, $data)
 {
  global $flag;
  global $duration;
  global $location;
  global $application;
  global $service;

if($flag == 'Open duration')
  {
   $duration[] = $data;
  }
  if($flag == 'Configuration Item Name:')
  {
   $application[] = $data;
  }
  if($flag == 'Service  ')
  {
   $service[] = $data;
  }
  if($flag == 'Caller Location  ')
  {
   $location[] = $data;
  }
 }

?>

?>

index.php
<?php

$count  = 0;

require_once('libraries.inc.php');

$parser  = xml_parser_create();
 xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, false);
 xml_set_element_handler($parser, 'opening_element', 'closing_element');
 xml_set_character_data_handler($parser, 'character_data');

$document = file('data.xml');

foreach($document as $line)
 {
  xml_parse($parser, $line);
 }
 xml_parser_free($parser);

printf("Folgendes wurde gefunden: <br>");
 foreach($location as $item)
 {
  echo $item."<br>";
 }

?>

?>

Die Datei wird zwar geparsed, wenn ich aber als letzten Schritt in der foreach-Schleife zum Testen die Locations anzeigen lasse sind es statt 200 Einträgen plötzlich 400, und jeder zweite Eintrag im Array $service ist leer.

Sieht da jemand den Fehler? Ich leider nicht  :(

Danke im Voraus,

Mario