Zurück tutorials.de > Programming > PHP

 
 
Hallo und herzlich willkommen! Tutorials.de ist eine Hilfe-Community mit dem Motto User helfen Usern. Als Gast verfügst Du über Schreibrechte in unseren Foren und Blogs. Du kannst dich aber gerne auch kostenlos registrieren und Teil unserer Gemeinschaft werden! Viel Spaß & Erfolg bei der Vermehrung deines Wissens :-)

Themen: 242.975 | Beiträge: 1.352.293 | Mitglieder: 169.418 (Stand 28.01.10) | Fragen zur Nutzung von Tutorials.de? Nutzungsregeln | Kontaktformular | Impressum

Jubiläums-Countdown 23.02 23.03 23.04 23.05 23.06 23.07 23.08 23.09


Einladung zum C++ für Einsteiger-Workshop
  AntwortAntworten (über Gastzugang)    
  AntwortAntworten (über Gastzugang)    
 
Themen-Optionen Ansicht
Alt 26.01.10, 18:06   #1 (permalink)
Mitglied Brokat
 
Benutzerbild von WiZdooM  
 
Registriert seit: Oct 2003
Ort: Hessen
Beiträge: 310
Renommee-Modifikator: 15
WiZdooM wird schon bald berühmt werden

PHP/XMLDOM: Umbruch nach CreateElement

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
  WiZdooM ist offline  
 
Alt 26.01.10, 19:34   #2 (permalink)
Mitglied Platin
 
Benutzerbild von hela tutorials.de Premium-User 
 
Registriert seit: Oct 2004
Beiträge: 733
Renommee-Modifikator: 24
hela genießt hohes Ansehenhela genießt hohes Ansehenhela genießt hohes Ansehenhela genießt hohes Ansehenhela genießt hohes Ansehenhela genießt hohes Ansehenhela genießt hohes Ansehenhela genießt hohes Ansehen

AW: PHP/XMLDOM: Umbruch nach CreateElement

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:
    <xsl:output method="xml" indent="yes" />
  • 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.
__________________
Wenn man dumm ist, dann hat man folgendes Problem: Es gelingt einem nicht, sich schlau zu stellen.
Ich versuche es erst gar nicht. Auch nicht in diesem Forum. Versprochen.
Meinung von Dieter Nuhr zu diesem Thema.
  hela ist offline  
 
Alt 05.02.10, 17:57   #3 (permalink)
Mitglied Brokat
 
Benutzerbild von WiZdooM  
 
Registriert seit: Oct 2003
Ort: Hessen
Beiträge: 310
Renommee-Modifikator: 15
WiZdooM wird schon bald berühmt werden

aktuelle News/Nachricht AW: PHP/XMLDOM: Umbruch nach CreateElement

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:
<?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:
<?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
  WiZdooM ist offline  
 
Alt 05.02.10, 18:27   #4 (permalink)
do ut des
 
Benutzerbild von Felix Jacobi tutorials.de Moderator 
 
Registriert seit: Nov 2001
Ort: Wuppertal
Beiträge: 4.785
Renommee-Modifikator: 54
Felix Jacobi hat die Renommee-Anzeige deaktiviert

AW: PHP/XMLDOM: Umbruch nach CreateElement

Versuch es mal mit:

PHP-Code:
$xml->formatOutput true
__________________
Der neue Personalausweis kommt...

KIDS Kinderbetreuungsdienst
Xing

They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety.
Benjamin Franklin
  Felix Jacobi ist offline  
 
Alt 06.02.10, 04:35   #5 (permalink)
Mitglied Platin
 
Benutzerbild von hela tutorials.de Premium-User 
 
Registriert seit: Oct 2004
Beiträge: 733
Renommee-Modifikator: 24
hela genießt hohes Ansehenhela genießt hohes Ansehenhela genießt hohes Ansehenhela genießt hohes Ansehenhela genießt hohes Ansehenhela genießt hohes Ansehenhela genießt hohes Ansehenhela genießt hohes Ansehen

AW: PHP/XMLDOM: Umbruch nach CreateElement

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!
__________________
Wenn man dumm ist, dann hat man folgendes Problem: Es gelingt einem nicht, sich schlau zu stellen.
Ich versuche es erst gar nicht. Auch nicht in diesem Forum. Versprochen.
Meinung von Dieter Nuhr zu diesem Thema.
  hela ist offline  
 
Alt 17.02.10, 13:05   #6 (permalink)
Mitglied Silber
 
Benutzerbild von SaschaT  
 
Registriert seit: Aug 2006
Ort: Stuttgart
Beiträge: 73
Renommee-Modifikator: 8
SaschaT hat eine blütenweiße Weste

AW: PHP/XMLDOM: Umbruch nach CreateElement

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.
__________________
trivago - Mitmachen, Spaß haben, Geld verdienen. Die Reisecommunity, die's in sich hat.

Geändert von SaschaT (17.02.10 um 13:13 Uhr).
  SaschaT ist offline  
 
 
 
Lesezeichen:


Themen-Optionen
Ansicht
Ähnliche Themen
 
Thema Autor Forum Antworten Letzter Beitrag
Umbruch nach 3 Ausgaben rollerueckwaerts PHP 2 29.06.09 18:16
Bilder-Umbruch nach 5 Elementen + PHP mkoeni1 PHP 2 13.11.07 10:42
Umbruch nach 3 Spalten :) indylein PHP 1 17.03.05 15:16
Xmldom Schnitz Visual Basic 6.0 0 19.06.02 15:27
umbruch nach 4 images DjDee PHP 0 28.12.01 11:32
» Tools
 
tutorials.de-Tools tutorial.de-Suchfeld tutorial.de-Widget tutorial.de-RSS-Feed tutorial.de-Banner
» Neue Links
 
Hits: 134
»
JHT's Planetary...
(Cinema 4D-Objekte)
Hits: 261
»
Tageslicht ohne GI
(Cinema 4D-Tutorials)
Hits: 148
»
Puzzle
(Cinema 4D-Tutorials)
Hits: 100
»
Lacreme
(Cinema 4D-Tutorials)
Hits: 189
»
Liquid Light
(Cinema 4D-Tutorials)
» Aktuelle Umfrage
 
Bist du mit der Geschwindigkeit der Tutorials.de-Website zufrieden?
Ja, es putzt mir glatt den Staub vom Bildschirm! - 79,79%
150 Stimmen
Nein, ich denke da muss noch nachgebessert werden... - 20,21%
38 Stimmen
Stimmen gesamt: 188
Du darfst bei dieser Umfrage nicht abstimmen.

 

Alle Zeitangaben in WEZ +1. Es ist jetzt 10:14 Uhr.


Powered by vBulletin® Version 3.8.5 (Deutsch) & vBadvanced CMPS v.3.2.0
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.5.0 RC2 ©2010, Crawlability, Inc.
Alle Rechte vorbehalten ©2000 - 2010 tutorials.de
Design by Mark, CSS by Maik & Sven Mintel
Seite generiert in 0,22446 Sekunden mit 26 queries