Hallo Leute
Bin grad etwas am verzweifeln, da eines meiner Scripte, dass ich auf einen Spezialfall umrüsten wollte letzte Woche funktioniert hat, und es diese Woche nicht mehr tut.
Es handelt sich hierbei um das Script, mit welchem ich ein XML-File parsen will, ein Feld extrahiere, die beiden Sprachen die darin enthalten sind trenne und ein neues XML-File schreibe, in welchem nur noch der eindeutige Bezeichner und die Felder für die beiden Sprachen drin sind.
Im Gegensatz zu letzter Woche bricht der Parser aber heute das Parsing ohne (für mich) ersichtlichen Grund ab. Nachfolgend nochmals mein Script:
Und hier noch der erste Datensatz des XML-Files um die Struktur klar zu machen:
Wenn ich nun mein Script durchlaufen lasse, bricht er immer nach "<BezeichnungF1>Kleiner Text</BezeichnungF1>" ab und gibt das File aus. Ich habe keine Idee wieso, ausser dass er vielleicht einfach Französisch nicht mag. Allerdings halte ich das für unwahrscheinlich.
Hat irgendeiner eine Idee, woran es liegen könnte? Ich blick langsam nicht mehr durch.
Herzlichen Dank
Gruss Igäl
Bin grad etwas am verzweifeln, da eines meiner Scripte, dass ich auf einen Spezialfall umrüsten wollte letzte Woche funktioniert hat, und es diese Woche nicht mehr tut.
Es handelt sich hierbei um das Script, mit welchem ich ein XML-File parsen will, ein Feld extrahiere, die beiden Sprachen die darin enthalten sind trenne und ein neues XML-File schreibe, in welchem nur noch der eindeutige Bezeichner und die Felder für die beiden Sprachen drin sind.
Im Gegensatz zu letzter Woche bricht der Parser aber heute das Parsing ohne (für mich) ersichtlichen Grund ab. Nachfolgend nochmals mein Script:
PHP-Code:
<?php
error_reporting(E_ALL);
/********************************************************/
class Artikel {
protected $parser;
protected $elemArr = array();
private $dom_obj;
private $n_xml_data = array(); //Daten welche ich später verarbeiten will, werden hier gespeichert
private $cnt = 0;
public function __construct() {
$this->dom_obj = $this->generate_dom_doc(); //Ein neues DOM - Objekt mit XML - Header erzeugen
$this->parser = xml_parser_create();
xml_set_object($this->parser, $this);
xml_set_element_handler($this->parser, 'startElement', 'endElement');
xml_set_character_data_handler($this->parser, 'characterData');
}
public function __destruct() {
xml_parser_free($this->parser);
}
public function readCatalog($catalog) {
xml_parse($this->parser, file_get_contents($catalog), true);
}
protected function startElement($parser, $element, $attributes) {
array_push($this->elemArr, $element);
}
protected function endElement($parser, $element) {
array_pop($this->elemArr);
}
protected function characterData($parser, $cdata) {
switch($this->elemArr[sizeof($this->elemArr)-1]) {
case "AUTOM_ARTIKELNR": $this->fill_arr("Autom_ArtikelNr", $cdata);
break;
case "MEMO": $this->fill_arr("Memo", $cdata);
break;
case "MABBEGD": $this->fill_arr("MABBegD", $cdata);
break;
case "MABENDD": $this->fill_arr("MABEndD", $cdata);
break;
case "MABBEGF": $this->fill_arr("MABegF", $cdata);
break;
case "MABENDF": $this->fill_arr("MAEndF", $cdata);
$this->cnt++;
break;
}
}
private function fill_arr($field, $cdata) {
if(!empty($this->n_xml_data[$this->cnt][$field])) {
$this->n_xml_data[$this->cnt][$field] .= $cdata;
}else{
$this->n_xml_data[$this->cnt][$field] = $cdata;
}
}
private function generate_dom_doc() {
$dom = new DOMDocument("1.0");
header("Content-Type: text/plain");
return $dom;
}
public function insert_data() {
$art_root = $this->dom_obj->createElement("ArtikelRoot");
$this->dom_obj->appendChild($art_root);
for($i=0;$i<count($this->n_xml_data);$i++) {
$d_text = "";
$f_text = "";
if(!empty($this->n_xml_data[$i]['Memo'])) {
$memo_arr = explode("\n", $this->n_xml_data[$i]['Memo']);
}
$artikel = $this->dom_obj->createElement("Artikel");
$art_root->appendChild($artikel);
//ArtikelNr in die Struktur einfügen
$a_nr = $this->dom_obj->CreateElement("Autom_ArtikelNr");
$artikel->appendChild($a_nr);
$art_nr = $this->dom_obj->createTextNode($this->n_xml_data[$i]['Autom_ArtikelNr']);
$a_nr->appendChild($art_nr);
if(!empty($this->n_xml_data[$i]['Memo'])) {
//Deutsche Memo in die Struktur einfügen
$memo_d = $this->dom_obj->CreateElement("MemoD");
$artikel->appendChild($memo_d);
for($d=$this->n_xml_data[$i]['MABBegD'];$d<=$this->n_xml_data[$i]['MABEndD'];$d++) {
$d_text .= !empty($memo_arr[$d]) ? $memo_arr[$d] : "\n";
}
$text_d = $this->dom_obj->createTextNode($d_text);
$memo_d->appendChild($text_d);
//Französische Memo in die Struktur einfügen
$memo_f = $this->dom_obj->createElement("MemoF");
$artikel->appendChild($memo_f);
for($f=$this->n_xml_data[$i]['MABegF'];$f<=$this->n_xml_data[$i]['MAEndF'];$f++) {
$f_text .= !empty($memo_arr[$f]) ? $memo_arr[$f] : "\n";
}
$text_f = $this->dom_obj->createTextNode($f_text);
$memo_f->appendChild($text_f);
}
}
}
public function show_file() {
echo $this->dom_obj->saveXML();
}
}
/********************************************************/
/********************************************************/
$artikel = new Artikel;
$artikel->readCatalog("Small.xml");
$artikel->insert_data();
$artikel->show_file(); //Generiertes File anzeigen
/********************************************************/
/********************************************************/
?>
Code:
<?xml version="1.0" encoding="UTF-8"?> <dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2007-07-23T07:32:50"> <Artikel> <Autom_ArtikelNr>291</Autom_ArtikelNr> <ArtikelNr>#100.080</ArtikelNr> <BezeichnungD1>Kleiner Text</BezeichnungD1> <Zaunmakt>0</Zaunmakt> <Trad>Ja, ok</Trad> <BezeichnungD2>Mittlerer Text</BezeichnungD2> <VP2>0</VP2> <EPbewertet>0</EPbewertet> <BezeichnungD3>Kleiner Text</BezeichnungD3> <BezeichnungF1>Kleiner Text</BezeichnungF1> <BezeichnungF2>Kleiner Text</BezeichnungF2> <BezeichnungF3>Kleiner Text</BezeichnungF3> <MengenEinheitD>m1</MengenEinheitD> <MengenEinheitF>m</MengenEinheitF> <Verkaufseinheit>1</Verkaufseinheit> <aktiv>1</aktiv> <EPaktuell>0</EPaktuell> <EPmix>0</EPmix> <VP1>0</VP1> <Lagerbestand>0</Lagerbestand> <Reserviert>0</Reserviert> <Verkauft>0</Verkauft> <Anfangsbestand>0</Anfangsbestand> <Mindestbestand>0</Mindestbestand> <MinBestellmenge>0</MinBestellmenge> <Bestellt>0</Bestellt> <Maximalbestand>0</Maximalbestand> <IdealBestand>0</IdealBestand> <Gewicht>0</Gewicht> <Bruttogewicht>0</Bruttogewicht> <LagerVerbuchung>1</LagerVerbuchung> <Rabattgewähren>1</Rabattgewähren> <UmsatzActiv>0</UmsatzActiv> <AktionActiv>0</AktionActiv> <iRabattActiv>0</iRabattActiv> <MgRabattActiv>0</MgRabattActiv> <MwstCode>USt76</MwstCode> <Provision>0</Provision> <ErtragsKonto>3200</ErtragsKonto> <Bearbeitung>2007-04-23T00:00:00</Bearbeitung> <Memo> Grosser Text Deutsch Möglicherweise mehrzeilig und teilweise sogar mit Absatz Grosser Text Französisch Möglicherweise mehrzeilig und teilweise sogar mit Absatz <MemoAlsBez>1</MemoAlsBez> <MABBegD>1</MABBegD> /*Zeile aus Memo, in welcher der deutsche Text beginnt*/ <MABEndD>4</MABEndD> /*Zeile aus Memo, in welcher der deutsche Text endet*/ <MABBegF>6</MABBegF> /*Zeile aus Memo, in welcher der französische Text beginnt*/ <MABEndF>10</MABEndF> /*Zeile aus Memo, in welcher der französische Text endet*/ <MABBegE>0</MABBegE> <MABEndE>0</MABEndE> <LiefPKNr>0</LiefPKNr> </Artikel> </dataroot>
Hat irgendeiner eine Idee, woran es liegen könnte? Ich blick langsam nicht mehr durch.
Herzlichen Dank
Gruss Igäl
Kommentar