tutorials.de-Buchverschenkaktion 08/2010
+ Auf Thema antworten
  1. #1
    Benutzerbild von WiZdooM
    WiZdooM WiZdooM ist offline Mitglied Brokat WiZdooM wird schon bald berühmt werden
    Registriert seit
    Oct 2003
    Ort
    Hessen
    Beiträge
    327
    Hallo

    Ich öffne mit PHP eine Logdatei im XML-Format, worin dann ein Knoten erzeugt wird und Attribute gesetzt werden.
    Jetzt ist nur das unschöne, dass die XML-Struktur an für sich durch die verketteten Elemente unlesbar wird.
    Zwar formatiere ich die Ausgabe mit XSL aber ich hätte dennoch gern in der XML einen Knoten pro Zeile.
    Kann man einen Umbruch über DOM einfügen (ich meine nicht cdata <br/> für Textumbruch des Nodevalue!) oder muss ich die XML als String streamen und ein \n bzw CR LF setzen?

    Gruß
    Wizzy
    Gruß

    Wizzy

  2. PHP 5 / MySQL 5 Seminar (22 Stunden Video-Training)

    Preis: früher: 39,95€ - jetzt nur: 7,99€
    Innerhalb Deutschlands versandkostenfrei!

    PHP 5 / MySQL 5 Lernkurs – 22 Stunden Video-Training auf DVD
    - PHP-, MySQL- und PHPMyAdmin-Grundlagen
    - Datenbankprogrammierung, objektorientierte Programmierung
    - Geeignet für Windows XP und Windows Vista


    Hier geht es zum Angebot

    Über 1.000 weitere IT-Bücher zum Sonderpreis lieferbar!


  3. #2
    Benutzerbild von hela
    hela hela ist offline Mitglied Brillant hela genießt hohes Ansehen hela genießt hohes Ansehen hela genießt hohes Ansehen hela genießt hohes Ansehen hela genießt hohes Ansehen hela genießt hohes Ansehen hela genießt hohes Ansehen hela genießt hohes Ansehen
    tutorials.de Premium-User
    Registriert seit
    Oct 2004
    Beiträge
    800
    Zitat Zitat von WiZdooM Beitrag anzeigen
    ... Zwar formatiere ich die Ausgabe mit XSL aber ich hätte dennoch gern in der XML einen Knoten pro Zeile ...
    Es gibt m.E. zwei Möglichkeiten:
    • Du gibst die XML-Datei entweder als Text aus:
      PHP-Code:
      header("Content-Type: text/plain"); 
      Dann kannst du im XSL die Einrückung festlegen:
      Code :
      1
      
      <xsl:output method="xml" [COLOR=Blue]indent="yes"[/COLOR] />
    • Oder du gibst die XML-Datei als XML aus:
      PHP-Code:
      header("Content-Type: application/xml; charset=UTF-8"); 
      Dann gibt (bei mir) jeder Browser die XML-Daten so aus, wie du es haben willst.

  4. #3
    Benutzerbild von WiZdooM
    WiZdooM WiZdooM ist offline Mitglied Brokat WiZdooM wird schon bald berühmt werden
    Registriert seit
    Oct 2003
    Ort
    Hessen
    Beiträge
    327
    Hi Hela.

    Ich glaube ich habe mich etwas unglücklich ausgedrückt. Ich meinte nicht ein XML-Dokument mit XSL als Baumstruktur auszugeben, sondern in der XML-Datei in jeder Zeile nur einen Knoten stehen zu haben. (Formatiert)

    Beispiel wie es zur Zeit aussieht:
    Code :
    1
    2
    3
    4
    
    <?xml version="1.0" encoding="iso-8859-1"?>
    <?xml-stylesheet href="flugschreiber.xsl" type="text/xsl"?>
    <Blackbox><eintrag value="xyz"/><eintrag value="abc"/><eintrag value="4711"/><eintrag value="0815"/>
    </Blackbox>

    So hätte ich es gerne in der XML (nicht in einer Ausgabe durch den Browser!) stehen, wenn ich einen Texteditor aufmache:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
    <?xml version="1.0" encoding="iso-8859-1"?>
    <?xml-stylesheet href="flugschreiber.xsl" type="text/xsl"?>
    <Blackbox>
    <eintrag value="xyz"/>
    <eintrag value="abc"/>
    <eintrag value="4711"/>
    <eintrag value="0815"/>
    </Blackbox>

    Hier mein Code für das Erzeugen des XML-Knotens:

    PHP-Code:
    function logIntoXML($value)
        
    $filename "Flugschreiber.xml";
        
    $xml = new DOMDocument();
        
    $xml->validateOnParse=true;
        
    $xml->Load($filename);
        
        
    $root $xml->getElementsByTagName('Blackbox')->item(0);

        
    $node $xml->createElement('eintrag');
        
    $entry $root->appendChild($node);
        
    $entry->setAttribute('value',$value);
        
    $xml->Save($filename); 
    Wenn ich das manuell erstelle kann ich doch auch nach einem Element einen Zeilenumbruch machen. Generisch wird einfach jedes Element "eintrag" hintereinander geschrieben anstatt untereinander.
    Gruß

    Wizzy

  5. #4
    Benutzerbild von Felix Jacobi
    Felix Jacobi Felix Jacobi ist offline do ut des Felix Jacobi hat die Renommee-Anzeige deaktiviert
    tutorials.de Moderator
    Registriert seit
    Nov 2001
    Ort
    Wuppertal
    Beiträge
    4.965
    Blog-Einträge
    65
    Versuch es mal mit:

    PHP-Code:
    $xml->formatOutput true
    KIDS Kinderbetreuungsdienst
    Xing

    They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety.
    Benjamin Franklin

  6. #5
    Benutzerbild von hela
    hela hela ist offline Mitglied Brillant hela genießt hohes Ansehen hela genießt hohes Ansehen hela genießt hohes Ansehen hela genießt hohes Ansehen hela genießt hohes Ansehen hela genießt hohes Ansehen hela genießt hohes Ansehen hela genießt hohes Ansehen
    tutorials.de Premium-User
    Registriert seit
    Oct 2004
    Beiträge
    800
    Zitat Zitat von WiZdooM Beitrag anzeigen
    Ich glaube ich habe mich etwas unglücklich ausgedrückt.
    Wohl wahr.
    Zitat Zitat von WiZdooM Beitrag anzeigen
    Ich meinte nicht ein XML-Dokument mit XSL als Baumstruktur auszugeben, sondern in der XML-Datei in jeder Zeile nur einen Knoten stehen zu haben. (Formatiert)
    Eigentlich geht es doch darum.

    Wenn du dein oben gezeigtes XML-Dokument mit der DOMDocument-Klasse erzeugt hast und anschließend als Text ausgibst, dann solltest du die $formatOutput-Eigenschaft setzen, so wie es Felix gezeigt hat. Wenn du aber nach der XML-Erzeugung damit vor der Ausgabe noch eine XSL-Transformation machst, dann ist die o.g. Einstellung im XSL-Stylesheet relevant.

    Letztendlich sind aber die Einstellungen des Anzeigeprogramms, mit dem das XML-Dokument dargestellt und evtl. weiterverarbeitet wird, dafür entscheidend, wie das XML-Dokument dann zu sehen ist.
    Theoretisch könntest du zwar dein Vorhaben dadurch realisieren, indem du nach jedem Elementknoten einen Textknoten mit einem Zeilenumbruch (&#x0A;) einhängst, aber das ist keine gute Idee!

  7. #6
    Benutzerbild von SaschaT
    SaschaT SaschaT ist offline Mitglied Silber SaschaT hat eine blütenweiße Weste
    Registriert seit
    Aug 2006
    Ort
    Stuttgart
    Beiträge
    73
    Dazu habe ich mal noch eine Frage.

    Wenn ich ein DOMDocument bei dem ich formatOutput auf true gesetzt habe, in eine Datei schreibe wird das hübsch mit Zeilenumbrüchen und Einrückungen formatiert in die Datei geschrieben. Soweit so gut.

    Aber wenn ich dann diese Datei wieder in ein DOMDocument lade, kriege ich für jeden Zeilenumbruch ein TextNode generiert, der eben diesen Zeilenumbruch enthält.

    PHP-Code:
    /**
    * DOMDocument erzeugen
    */
    $dom1 = new DOMDocument;
    $dom1->formatOutput true;
    $dom1->loadXML("<root1><node1>content1</node1></root1>");
    /**
    * DOMDocument in Datei schreiben
    */
    $dom1->save("example.xml");

    /**
    * DOMDocument wieder aus Datei lesen
    */
    $dom2 = new DOMDocument;
    $dom2->load("example.xml");

    /**
    * ASCII Code des ersten Kindelements unter dem Rootelement ausgeben
    */
    echo ord($dom2->documentElement->firstChild->nodeValue); 
    Man sollte erwarten, dass das erste Kindelement des Rootelements <node1>content</node1> sei, ist aber nicht so, da hat sich ein TextNode mit dem Inhalt "LF" eingeschmuggelt- das obige Skript gibt "10" aus.
    Mach ich irgendwas falsch? Wo ist der Haken?

    PS: Haken gefunden die Eigenschaft preserveWhiteSpace des DOMDocument Objekts auf false setzen; und zwar VOR dem ->load() Befehl.... Danach bringt es nichts mehr, habs getestet. *schwitz* Daran hab ich jetzt bestimmt 3 Tage rumgemacht. Manchmal hilft es wirklich jemanden zu fragen und manchmal kommt schon beim Formulieren der Frage der rettende Geistesblitz.
    Geändert von SaschaT (17.02.10 um 13:13 Uhr)
    trivago - Mitmachen, Spaß haben, Geld verdienen. Die Reisecommunity, die's in sich hat.

Ähnliche Themen

  1. Umbruch nach 3 Ausgaben
    Von rollerueckwaerts im Forum PHP
    Antworten: 2
    Letzter Beitrag: 29.06.09, 18:16
  2. Bilder-Umbruch nach 5 Elementen + PHP
    Von mkoeni1 im Forum PHP
    Antworten: 2
    Letzter Beitrag: 13.11.07, 10:42
  3. Umbruch nach 3 Spalten :)
    Von indylein im Forum PHP
    Antworten: 1
    Letzter Beitrag: 17.03.05, 15:16
  4. Xmldom
    Von Schnitz im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 19.06.02, 15:27
  5. umbruch nach 4 images
    Von DjDee im Forum PHP
    Antworten: 0
    Letzter Beitrag: 28.12.01, 11:32

Lesezeichen

Lesezeichen