php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 16.07.2007, 15:44  
Erfahrener Benutzer
 
Registriert seit: 16.08.2007
Beiträge: 702
PHP-Kenntnisse:
Anfänger
Igäl befindet sich auf einem aufstrebenden Ast
Standard XML File mit PHP modifizieren

Hallo Leute

Schonwieder ich. Hab mich jetzt ein wenig über die XML-Parsing Methoden schlau gemacht und hab ein kleines Script geschrieben, wie ich mein XML-File wunderbar parsen will. Das Script werden einige schon gesehen haben, wenn sie sich mit XML-Parsing beschäftigt haben. Ist relativ gängig:

PHP-Code:
<?php
error_reporting
(E_ALL);
/********************************************************/
class Artikel    {
    protected 
$parser;
    protected 
$elemArr = array();

    public function 
__construct()    {
        
$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->parserfile_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 
"DESC1":    $this->insert_more_data($cdata);    //Hier wird die Methode aufgerufen, mit welcher ich einen
                            
break;                                //weiteren Wertesatz mit dem selben Wert einfügen möchte.
        
}
    }

    function 
insert_more_data($cdata)    {
        
    }
}
/********************************************************/
/********************************************************/
$artikel = new Artikel;

$artikel->readCatalog("test.xml");
/********************************************************/
/********************************************************/
?>
Das XML-File sieht folgendermassen aus:

Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<Test>
<Id>1</Id>
<Title>Titel 1</Title>
<Desc1>Das ist eine Beschreibung</Desc1>
</Test>
Nun fehlt es mir aber gänzlich an Ideen und Erfahrung, wie ich unter das <Desc1> ein <Desc2> mit dem selben Text "Das ist eine Beschreibung" bekomme. Gibts dafür geeignete Funktionen oder muss ich das File immer wieder neu schreiben? Man muss mir hier keine fertigen Lösungen präsentieren. Bin froh um jeden Denkanstoss.

Gruss Igäl
Igäl ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 16.07.2007, 15:51  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Hab ich schonmal gesehen, jo, würde dir aber trotzdem die DOM-API ans Herz legen (zumal du ja eh scho objektorientiert angefangen hast ).

Zitat:
Nun fehlt es mir aber gänzlich an Ideen und Erfahrung, wie ich unter das <Desc1> ein <Desc2> mit dem selben Text "Das ist eine Beschreibung" bekomme. Gibts dafür geeignete Funktionen oder muss ich das File immer wieder neu schreiben? Man muss mir hier keine fertigen Lösungen präsentieren. Bin froh um jeden Denkanstoss.
Normalerweise (oop) in etwa so
Code:
$descChild = $xml->getChild ('Test')->getChild('Title')->getChild('Desc1');
Ist laaange her, aber so oder so in der Art dürfte das Format gewesen sein
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 16.07.2007, 15:53  
Erfahrener Benutzer
 
Registriert seit: 16.08.2007
Beiträge: 702
PHP-Kenntnisse:
Anfänger
Igäl befindet sich auf einem aufstrebenden Ast
Standard

Naja das hab ich mir jetzt in ner Stunde zusammengebastelt/pastet und grösstenteils verstanden. Wenn mir dann was wärmstens empfohlen wird, dann kommts auf ne weitere Stunde büffeln auch nich an Nur muss ich mich dann wohl noch in die DOM-Struktur einlesen, nicht? Mach ich aber mal. Danke für den Tip

Edit: Ich habe später ein XML mit 400k Zeilen. Habe gelesen das DOM sehr Speicherintensiv ist. Ist es für solch grosse Files also empfohlen mit DOM zu arbeiten? Das heisst etwa 70 Zeilen spezifizieren einen Artikel. Pro 70 Zeilen müsste ich also eine Zeile einschieben. Ist das realistisch?

Edit 2: Hast du vlt einen Link auf ein mehr oder weniger fertiges Musterscript, das ich mir mal durchlesen und das nötige Nachschlagen kann? Ich hab jetzt mal die Theorie zu DOM duchgelesen, weiss aber nicht wie ich es in PHP anwenden soll.. is wohl einiges komplizierter als SAX ^^

Edit 3: Wie soll ich validieren? Gegen RelaxNG, XML-Schema oder gegen das anscheinend Oldschool DTD? Ach herrje.. gibts den Stoff irgendwo n bissl gebündelt?
Igäl ist offline  
Alt 16.07.2007, 16:45  
Erfahrener Benutzer
 
Registriert seit: 16.08.2007
Beiträge: 702
PHP-Kenntnisse:
Anfänger
Igäl befindet sich auf einem aufstrebenden Ast
Standard

Ist die Idee sehr schlecht, über das SAX API die Geschichte auszulesen, die benötigten Daten rauszufiltern und dann mit diesen Daten über die DOM API ein neues XML-File zu schreiben? Das wär jetzt so mein spontaner Ansatz nach ner Stunde einlesen
Igäl ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
File Storage Script chinty Scriptbörse 1 19.07.2008 18:39
PHP file in HTML file anzeigen, geht das? PHP Tipps 2006 8 02.02.2006 10:51
[Erledigt] Exim --- Mailserver empfängt keine Mails Server, Hosting und Workstations 4 23.12.2005 18:28
[Erledigt] PEAR LOG file handler buffering funktioniert nicht PHP-Fortgeschrittene 0 16.12.2005 10:22
[Erledigt] Wie kann ich ein Zip File mit PHP erstellen PHP-Fortgeschrittene 7 11.10.2005 12:46
filemtime() auf zweitem Server File prüfen? tekknotrip PHP Tipps 2005-2 2 19.08.2005 16:48
File nur temporär erstellen PHP Tipps 2005-2 2 02.08.2005 21:39
libmysqlclient.so.10 is needed Datenbanken 11 20.06.2005 15:27
[Erledigt] Unix file lesen? PHP-Fortgeschrittene 15 08.06.2005 18:05
update auf php 5.0.4 robo47 Server, Hosting und Workstations 6 10.04.2005 19:00
file wegen Sicherheitslücke eingeschränkt - Alternativen? zwelch PHP-Fortgeschrittene 3 06.10.2004 18:59
file umbenennen - welcher php befehl? kain PHP Tipps 2004 4 20.08.2004 02:47
[Erledigt] html auslesen mit file() PHP Tipps 2004 2 02.08.2004 08:57
ausgefuehrtes php file als html speichern PHP Tipps 2004 8 28.07.2004 17:59
file(); problem PHP Tipps 2004 3 12.07.2004 11:51

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
xml einlesen php wenn element fehlt, php edit xml file

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:41 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.