Dom Xml - Php *SOLVED*

GrazerAK

Neuling
Thread Starter
Mitglied seit
01.09.2004
Beiträge
141
Hallo

Ich habe ein HTML Template, welches ich in ein DOMDocument lade. Zusätzlich lade ich aus einer Datenbank diverse XML Dateien, die ich per XSLTProcessor in HTML umwandle und auch in ein DOMDocument lade.

Beispiel im Template habe ich einen <div> Container in den ich ein paar <span> Container mit Daten laden möchte.

zuerst habe ich einfach die <span> in eine DOMNodeList gespeichert und dann versucht in einer Schleife jedes einzelne item an den <div> anzuhängen.

Hat nicht funkt.

Wenn ich die <span> in einen <div> einschließe und den dann anhängen versuche schreibt er es wird ein DOMNode Objekt erwartet, was ja von DomNodeList->item zurückgegeben wird.

Die Tags habe ich per getElementsbytagname bzw. getelementbyid bekommen. Was ich bei getelemtbyid nicht verstehe ist, warum es nicht funktioniert da die funktion genau wie createelemt() ein DOMElement ausgibt.
mit createelemt kann man aber die funktion appendChild() benutzten.

Also ziemlich verwirrend. Meine Frage einfach wie kann ich einen Knoten bzw. mehrere Knoten aus einer XML bzw XHTML datei an einen andere anhängen, ohne die werte auszulesen und mit createElement neue Tags erstellen.

mfg
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Warum gibst die komplette HTML-Seite nicht über XSLT aus? Du ziehst mehrere XML aus der Datenbank und lässt es via XSLT in die richtigen HTML-Tags wandeln.
Oder hab ich dich missverstanden?
 
Hallo

Ich habe mir das so vorgestellt, dass ich mehrere Klassen habe die alle Teile der HP aus fertigen XML Dateien bzw. generierten XML Dateien bauen und dann eine Klasse übergeben, die daraus und einem HTML Template die Seite baut. Später geht es dann weiter mit AJAX wo ich den selben Spass dann weiter brauche.

Mein Problem ist einfach, dass appendChild und importNode ein DOMNode Objekt verlangen. Laut manual gibt DOMNodeList->item ein DOMNode Objekt aus. Im Fehler steht aber DOMElement. getElementById gibt auch ein DOMElement aus.

Dass ich XML Dateien zusammenfügen kann ist für mich absolut wichtig, da ich mein Konzept (ich weiß zwar noch nicht genau wie das aussieht =) wird on the fly entwickelt) darauf aufgebaut habe.

Was ich nicht möchte ist in der Site build Klasse die XML Dateien auslesen und dann per createElement anhängen.

mfg
Hinzugefügter Post:
Also es dürfte etwas mit XSLTProcessor nicht stimmen. Wenn ich nämlich in ein und dem Selben DOMDocument mit getelementbyid suche und das dann irgendwo im selben Document wieder anhängen möchte geht das ohne Probleme.

Wenn ich aber im DOMDocument, dass per XSLT::Processor->TransformToDoc() erstellt wurde per getelementbyid suchen will gibt er null aus. Hier dürfte also der Fehler liegen.
 
Zuletzt bearbeitet:
Also die Lösung des Problems ist:
Man muss eine dtd oder xsd schreiben, damit das id Attribut als solches definiert wird, wenn das Dokument geparst wird.

Code:
<!ELEMENT div (span)+>
<!ATTLIST div 
  	id      ID #REQUIRED
>

Was aber extrem komisch ist, dass getElementsByTagName plötzlich ohne dtd funktioniert. Ich weiß aber nicht, was ich anders gemacht habe

xml schemata wären zwar die elegantere Lösung aber das war mir dann den erheblichen Mehraufwand nicht wert.

mfg

raphi
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh