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