Du bist nicht eingeloggt! Möglicherweise kannst du deswegen nicht alles sehen.
  (Noch kein mods.de-Account? / Passwort vergessen?)
Zur Übersichtsseite
Hallo anonymer User.
Bitte logge dich ein
oder registriere dich!
 Moderiert von: Che Guevara


 Thema: DomDocument und XML ( Häää? Wie gehtn das? )
[1] 2 nächste »
erste ungelesene Seite | letzter Beitrag 
Gori

Gori
verschmitzt lachen Häää? Wie gehtn das?
Tag,

ich acker grad mein Script um. Dazu steck ich meine Sprachdateien in xml und möchte die gern per Dom dann auslesen.

 
Code:
$doc = DOMDocument::load('languages/german.xml');
$xpath = new DOMXPath($doc);
    
foreach ($xpath->query('language/listings/todo/heading') as $heading)
{
    echo $heading->nodeValue;
}

So habe ich das bei http://www.professionelle-softwareentwicklung-mit-php5.de/erste_auflage/programming-php.xml.dom.html gefunden, aber des funzt nicht :/

xml sieht dazu so aus:

 
Code:
<language>
    <listings>
        <todo>
            <heading>todo</heading>
        </todo>
    </listings>
</language>


Help Augenzwinkern


/€
Ich habs fröhlich
'/language/listings/todo/heading'

muss es heissen, Thread kann aber für die Diskussion genutzt werden über Dom usw.
Hab bestimmt später noch Fragen fröhlich

/€2

Und da ist schon die erste:

Kann ich nur auf diesem Wege bestimmte Tags auslesen oder geht das auch anders?

/€3

 
Code:
$heading = $xpath->query('/language/listings/todo/heading');

echo $heading->item(0)->nodeValue;


Gehen würds auch so, welche Variante würdet ihr bevorzugen wenn ihr wißt das ihr nur genau ein tag habt was passt?
[Dieser Beitrag wurde 5 mal editiert; zum letzten Mal von Gori am 05.08.2006 17:10]
05.08.2006 16:39:31  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
-=IuM|Voodoo=-

-=IuM|Voodoo=-
 
Zitat von Gori
Gehen würds auch so, welche Variante würdet ihr bevorzugen wenn ihr wißt das ihr nur genau ein tag habt was passt?

Die Frage ist halt immer was passiert, wenn du mal die DTD / XML-Struktur änderst. Wenn du zum Beispielt sagst, dein Element kommt nur einmal vor, was passiert wenn es auf einmal doch zwei Mal vorkommt?

So ist es zum Beispiel wichtig XPath-Pfade so exakt wie möglich auszudrücken. Wenn ihr zum Beispiel 'foo/bar/element' habt, dann sollte man das auch so abfragen und nicht nur 'element' auch wenn es zum Zeitpunkt des Programmierens nur in foo/bar vorkommt.

Ich jobbe gerade bis zum Studienbeginn in einer kleinen Firma, die vor 5 Jahren mit ihrem kompletten Datenbestand nach XML migriert ist und hab da jetzt schon einige Erfahrungen gewinnen können.
05.08.2006 18:10:20  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Gori

Gori
Ich denke ich schreibe mir mit der zweiten Möglichkeit ne kleine Funktion die mir das einfach raussaugt und in eine var schreibt.

Irgendwie sowas:

$heading = xml_suck('language/listings/todo/heading');

oder so fröhlich
05.08.2006 19:01:35  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Netbeater

snow
.oO(xsl)
05.08.2006 19:13:47  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
[DK]Peacemaker

[dk]peacemaker
Dann schreibt dir lieber ne vernünftige Klasse für die Lokalisierung und erweiter dein System um Cultures.

Wie das aussehen könnte, sag ich auf Anfrage. Nachdem uni das ja schon nicht machen wollte, kann ich ja anderen Leuten .NET Sachen aufdiktieren.
05.08.2006 19:18:30  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Gori

Gori
Wozu ne Klasse, reicht doch eine xml die ausgetauscht wird und fertig?!

@€

hmm, wobei, ich könnte das in meine schon bestehende Options-klasse integrieren
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Gori am 05.08.2006 19:43]
05.08.2006 19:41:17  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
[DK]Peacemaker

[dk]peacemaker
Du ahnst gar nicht, was man in so ein System alles einbauen kann mit den Augen rollend
05.08.2006 19:53:04  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Gori

Gori
 
Zitat von [DK]Peacemaker
Du ahnst gar nicht, was man in so ein System alles einbauen kann mit den Augen rollend



Dann leg mal los, gern auch per PM oder ICQ Augenzwinkern
05.08.2006 19:54:01  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
[DK]Peacemaker

[dk]peacemaker
Kommt leider erst nachher, oder morgen früh, ich muss jetzt weg. Aber es ist praktisch das .NET Konzept kopiert, wo du einfach eine neue Datei hinzufügst, und wenn die Culture der neuen Datei für das aktuelle System zutrifft, werden die Werte, sofern sie existierten, aus dieser ausgelesen. Wenn nicht, dann wird das Standardfile genommen. Hört sich langweilig an, aber ist wahrscheinlich, wenn man ein komplettes System erstellen will, das einfach zu erweitern ist, ideal.

Wenn das nicht auf dich zutrifft, sag bescheid, andernfalls gibts morgen ein Konzept Breites Grinsen
05.08.2006 19:57:28  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Gori

Gori
 
Zitat von [DK]Peacemaker
Kommt leider erst nachher, oder morgen früh, ich muss jetzt weg. Aber es ist praktisch das .NET Konzept kopiert, wo du einfach eine neue Datei hinzufügst, und wenn die Culture der neuen Datei für das aktuelle System zutrifft, werden die Werte, sofern sie existierten, aus dieser ausgelesen. Wenn nicht, dann wird das Standardfile genommen. Hört sich langweilig an, aber ist wahrscheinlich, wenn man ein komplettes System erstellen will, das einfach zu erweitern ist, ideal.

Wenn das nicht auf dich zutrifft, sag bescheid, andernfalls gibts morgen ein Konzept Breites Grinsen



Her damit Augenzwinkern
Wissen ist Macht Breites Grinsen
05.08.2006 20:00:23  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Gori

Gori
Ok, Verzweiflung Breites Grinsen

 
Code:
$dom = new DOMDocument();
$dom->formatOutput = true;
            
$project = $dom->appendChild($dom->createElement('project'));
$options = $project->appendChild($dom->createElement('options'));


$options möchte ich nun was anhängen das aus einer Datei geladen wird.

 
Code:
<language>
   <bla>foo</bla>
</language>


But how?
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Gori am 06.08.2006 16:43]
06.08.2006 16:43:10  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
-=IuM|Voodoo=-

-=IuM|Voodoo=-
Einem Objekt die Node zuweisen und dann Objekt mit appendChild anhängen?
06.08.2006 18:09:52  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Gori

Gori
 
Zitat von -=IuM|Voodoo=-
Einem Objekt die Node zuweisen und dann Objekt mit appendChild anhängen?



Jo, so einfach wars nur nich

 
Code:
$options->appendChild($dom->importNode($language->getElementsByTagName('language')->item(0), true));


Wie kompliziert das sein kann

Peacemaker, wo is dein Konzept?
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Gori am 07.08.2006 10:00]
06.08.2006 18:44:57  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
unitrialer

Arctic
 
Zitat von Gori
 
Code:
$dom = new DOMDocument();
$dom->formatOutput = true;
            
$project = $dom->appendChild($dom->createElement('project'));
$options = $project->appendChild($dom->createElement('options'));



Ich weiß zwar jetzt nicht auf anhieb, was appendChild zurück gibt, aber ich würde es wohl eher so machen:

 
Code:
$dom = new DOMDocument();

$project = $dom->createElement('project');
$options = $dom->createElement('options');
$project->appendChild($options);
//$dom->appendChild($project);

//Wobei man einem blanken DOM kein child Appenden kann. Dazu brauchsde erstmal ne RootNode.
$dom->setRoot($project); // maybe
07.08.2006 14:15:33  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Gori

Gori
Ist genau das was bei mir steht, bloss das ichs abgekürzt habe fröhlich

Und setRoot soll man nicht mehr benutzen.

Und dem dom kannst du eine node appenden mit den Augen rollend
[Dieser Beitrag wurde 2 mal editiert; zum letzten Mal von Gori am 07.08.2006 19:54]
07.08.2006 19:52:38  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
unitrialer

Arctic
dem DOMDocument kann man ne Node appenden aber auch nur, weil DOMDocument von DOMNode erbt und dort die Methode drinne steckt. Es macht aber vom logischen her wenig Sinn, einem DOM mehrere Nodes zu appenden, weil dann isses kaputt bzw. nimmer valide, deswegen hatte ich auf setRoot geraten, aber die Methode gibts garnicht =)
07.08.2006 20:01:50  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Gori

Gori
 
Zitat von unitrialer
dem DOMDocument kann man ne Node appenden aber auch nur, weil DOMDocument von DOMNode erbt und dort die Methode drinne steckt. Es macht aber vom logischen her wenig Sinn, einem DOM mehrere Nodes zu appenden, weil dann isses kaputt bzw. nimmer valide, deswegen hatte ich auf setRoot geraten, aber die Methode gibts garnicht =)



Sicher macht es sinn wenn man eine node anfügt und die als root verwendet, nichts anderes mach ich da ja Augenzwinkern

Und ich meinte add_root:
http://de2.php.net/manual/en/function.domdocument-add-root.php
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Gori am 07.08.2006 20:16]
07.08.2006 20:15:18  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
unitrialer

Arctic
http://de3.php.net/dom les mal ganz zu Anfang...

Ja, es macht Sinn eine Node als RootNode zu verwenden. Aber der Name der Methode appendNode würde ja vermuten lassen, es gingen mehrere, was ja kein Sinn macht, so meinte ich das die ganze Zeit.
08.08.2006 11:03:49  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Netbeater

snow
Ich rate übrigens von dem dynamischen erstellen von XML mit DOMDocument ab - es ist grauenvoll langsam.
08.08.2006 12:46:37  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Gori

Gori
 
Zitat von Netbeater
Ich rate übrigens von dem dynamischen erstellen von XML mit DOMDocument ab - es ist grauenvoll langsam.



Das einzige was bei mir "langsam" ist, ist die Umwandlung des XSLT.

Und da der ganze Klabatsch sowieso noch experimentellen Status hat, wird sich sicherlich noch viel tun.


@uni

ja und, was genau meinst du da?
[Dieser Beitrag wurde 2 mal editiert; zum letzten Mal von Gori am 08.08.2006 13:57]
08.08.2006 13:54:24  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Netbeater

snow
 
Zitat von Gori
 
Zitat von Netbeater
Ich rate übrigens von dem dynamischen erstellen von XML mit DOMDocument ab - es ist grauenvoll langsam.



Das einzige was bei mir "langsam" ist, ist die Umwandlung des XSLT.

Und da der ganze Klabatsch sowieso noch experimentellen Status hat, wird sich sicherlich noch viel tun.


@uni

ja und, was genau meinst du da?



Da wird sich nicht mehr viel tun, versprochen

So ganz nebenbei ist die Generierung von meinem XML per Hand ca. 9x so schnell wie die Generierung mit DOMDocument
09.08.2006 1:28:23  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
unitrialer

Arctic
kann das deine Hand auch dynamisch?
09.08.2006 9:01:07  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
White[AoT]

Arctic
Ist in Javascript ansich genau das gleiche. Die Verarbeitung mit DOM ist weit schöner, dafür aber auch weit langsamer, als einfach den innerHTML zu setzen.

Ich machs ansich wirklch auch überall so:
- Verarbeitung mit DOM
- Erstellung einfach über Strings
09.08.2006 13:47:17  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Netbeater

snow
 
Zitat von unitrialer
kann das deine Hand auch dynamisch?



s/hand/selbst geschriebene funktion
09.08.2006 16:05:13  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
unitrialer

Arctic
 
Zitat von Netbeater
 
Zitat von unitrialer
kann das deine Hand auch dynamisch?



s/hand/selbst geschriebene funktion


die art zu antworten is einfach nur schwul!

Ich handhabs wie white in js :-)
09.08.2006 18:59:09  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
-=IuM|Voodoo=-

-=IuM|Voodoo=-
 
Zitat von Netbeater

So ganz nebenbei ist die Generierung von meinem XML per Hand ca. 9x so schnell wie die Generierung mit DOMDocument

Gut, dann willst du mir auch sicher meine 500.000 genesten SQL-Resulttatsätze jeweils in ein bestehndes XML-Dokument einhängen Augenzwinkern
11.08.2006 20:05:50  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Netbeater

snow
 
Zitat von -=IuM|Voodoo=-
 
Zitat von Netbeater

So ganz nebenbei ist die Generierung von meinem XML per Hand ca. 9x so schnell wie die Generierung mit DOMDocument

Gut, dann willst du mir auch sicher meine 500.000 genesten SQL-Resulttatsätze jeweils in ein bestehndes XML-Dokument einhängen Augenzwinkern



per Hand sollte in dem Zusammenhang nicht heißen, dass ich den Spaß wirklich per Hand tippe und dann als xml Datei speichere.

Die Generierung des XMLs als String ist ca. 9x schneller als die Verwendung von DOM*
12.08.2006 3:11:18  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
-=IuM|Voodoo=-

-=IuM|Voodoo=-
 
Zitat von Netbeater
Die Generierung des XMLs als String ist ca. 9x schneller als die Verwendung von DOM*

Nur merkst du dann zu spät, wenn dein XML-Dokument invalide wird, also wenn zum Beispiel unbekannte Entities vorkommnen.
12.08.2006 11:02:17  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Netbeater

snow
 
Zitat von -=IuM|Voodoo=-
 
Zitat von Netbeater
Die Generierung des XMLs als String ist ca. 9x schneller als die Verwendung von DOM*

Nur merkst du dann zu spät, wenn dein XML-Dokument invalide wird, also wenn zum Beispiel unbekannte Entities vorkommnen.



Du merkst es beim Erstellen, ich merk es beim Laden des Strings in ein DOMDocument. Beides liegt innerhalb der Skriptlaufzeit und ist daher von uns beiden gleich behandelbar.
12.08.2006 13:55:54  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Gori

Gori
So, habe ein neues Problem.

Ich lade eine statische XML-Datei in mein DomDoc.
Jetzt möchte ich aber einer bestimmten Node ein Attribut geben.

 
Code:
<languages>
    <german>Deutsch</german>
    <english>English</english>
</languages>


Soll verändert werden in:

 
Code:
<languages>
    <german selected="1">Deutsch</german>
    <english>English</english>
</languages>



Ich muss die Node sicher selecten mit getElementsByTagName und dann mit setAttribute das Attribut einfügen, aber ich krieg das einfach nicht gebacken
24.09.2006 14:25:53  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
 Thema: DomDocument und XML ( Häää? Wie gehtn das? )
[1] 2 nächste »

mods.de - Forum » Webdesign & Coding » 

Hop to:  

Thread-Tags:
dom  xml  xsl  xslt 
| tech | impressum