whitespace nur in MOZ (auch mit DTD)?

Beamter

Grünschnabel
Hallo liebe Forumsmitglieder,

ich sitze hier seit Stunden bzw Tagen und komme nicht weiter. Ich würde gerne eine Bilder Slide Show bauen. Das habe ich auch recht gut hinbekommen. Nun möchhte ich aber die Pfade zu den Bilddateien gerne aus einer XML Datei auslesen. Zuerst habe ich gute Fortschritte mit dem SPRY Framework von Adobe gemacht (version 1.6.1). Da setzt es bei mir aber aus, sobald man mehr als eine Ebene tiefer gehen sollte. Also dachte ich mir: Es kann doch nicht so schwer sein eine *.xml Datei mittels des XMLHttpRequest Objects zu laden und sich dann durch die einzelenen Ebenen zu hangeln und dann die Pfade auszulesen.

meine Datei sieht ungefähr so aus:

Code:
<inhalte>
<sonstige>
	<sonstg n="sonstg">
		<zust>Bestandsgeb</zust>
		<txt>Abnahme Tower Parc Offices, Bonn MAG - Marc Asbeck Grundbesitz Bonn</txt>
		<bild>3466</bild>
	</sonstg>
	<sonstg n="sonstg">
		<zust>Bestandsgeb</zust>
		<txt>Abnahme Tower Parc Offices, Bonn MAG - Marc Asbeck Grundbesitz Bonn</txt>
		<bild>3464</bild>
	</sonstg>
</sonstige>
<referenzen>
	<ref n="Versicherungen">
		<jahr>2009</jahr>
		<txt>Standsicherheitsüberprüfung Solartracergründung HDI-Gerling Firmen und Privat Versicherung AG</txt>
		<bild>3765</bild>
	</ref>
</referenzen>
<leistungen>
	<ref n="Versicherungen">
		<zust>2009</zust>
		<txt>Standsicherheitsüberprüfung Solartracergründung HDI-Gerling Firmen und Privat Versicherung AG</txt>
		<bild>3765</bild>
	</ref>
</leistungen>
</inhalte

Ich suche also immer den Inhalt des TAGS "bild". Sobald ich aber in der Schleife des "inhalte" Knotens zB bin dann gibt mir die childNodes.length Eigenschaft nur beim IE = 3 aus.
Lasse ich mir die nodeName mitteilen, kommt beim MOZ "#text" im Wechsel mit dem eigentlichen Namen heraus. Dass dies die Zeilenumbrüche in meiner in einem Editor gefertigten XML Datei sind, wurde mir recht zügig klar.

Dann las ich etwas über DTD's und implementierte eine so lange bis es passte:

Code:
<!DOCTYPE inhalte[
<!ELEMENT inhalte (sonstige, referenzen, leistungen)*>
<!ELEMENT sonstige (sonstg)*>
<!ELEMENT sonstg (zust, txt, bild)*><!ELEMENT zustg (#PCDATA)>
<!ELEMENT txt (#PCDATA)>
<!ELEMENT bild (#PCDATA)>
<!ELEMENT referenzen (ref)*>
<!ELEMENT ref (jahr, txt, bild)*>
<!ELEMENT jahr (#PCDATA)>
<!ELEMENT txt (#PCDATA)>
<!ELEMENT bild (#PCDATA)>
<!ELEMENT leistungen (lstg)*>
<!ELEMENT lstg (zust, txt, bild)*>
<!ELEMENT zust (#PCDATA)>
<!ELEMENT txt (#PCDATA)>
<!ELEMENT bild (#PCDATA)>
<!ATTLIST sonstg 
	n CDATA #IMPLIED>
<!ATTLIST ref 
	n CDATA #IMPLIED>
<!ATTLIST lstg 
	n CDATA #IMPLIED>
]>

Danach änderte sich nichts.

Bedeutet dies, dass ich tatsächlich alle Knoten manuell mit RegExp abfragen muß, ob es denn ja kein whitespace ist Das wäre ja traurig!

Ich danke euch schon einmal im Voraus für Eure Hilfe, Gedanken und Beiträge


viele Grüße aus Bonn

Thorsten
 
Moin Thorsten,

das mit den Whitespaces ist in der Tat sehr browserabhängig, was sehr ärgerlich ist.

Zum Glück gibt es aber getElementsByTagName()

Zum einen kannst du es(anders als bspw. getElementById() ) auch auf Knoten anwenden, und nicht nur auf das Dokument.
Zum Anderen ist dort auch eine Wildcard möglich(*)

Es bietet dir also gute Wege, nicht alle Arten von Knoten zu erfassen, sondern nur das, was du benötigst...Elementknoten.
 
Hallo Chef,

erstmal beste Grüße in die alte Heimat - sogar bis auf den Stadtbezirk korrekt -)

ach herje - das ist also echt so mühselig!?


habe jetzt eine Weile mit der aufgezeigten Möglichkeit getElementsByTagName() herumgedoktert.... mmh das blick ich noch nicht ganz wenn man alle KinderElemente mit dem TagNamen "inhalt" heraussuchen will, dann ist das
Code:
var inh = XMLDATA.responseXML;
var subinh = inh.getElementsByTagName("inhalt")[0]

Da muß ich wohl noch mal intensiver einsteigen - befürchte ich. Ich störe mich an der [0] am Ende. es sind doch (sagen wir mal) 36 elemente im MOZ und 18 im IE, aber nicht nur 1 - you know!? denn wenn ich mir subinh.childNodes.length ausgegeben lasse, dann erhalte ich eben die deutlich höhere Anzahl als 1. Aber vielleicht sollte ich einfach auch mal ne Runde schlafen gehen :confused:

Aber bis hierher schon einmal rechht herzlichen Dank! Es beruhigt mich sehr, dass ich nicht ganz so dämlich bin, wie ich mich zwischenzeitlich fühlte.

Danke! & Gruß
Thorsten
 
Wie sagt es Douglas Crockford:

there was the Document Object Model, also known affectionately as the DOM. It is what most people hate when they say they hate JavaScript.
:-)


Falls du die Möglichkeit hast, könntest du ja bspw. mit jQuery arbeiten.... das funktioniert auch mit XML-Dokumenten, und bietet dir komfortablere und browserunabhängigere Methoden für den Zugriff als das DOM.
 
Code:
var inh = XMLDATA.responseXML;
var subinh = inh.getElementsByTagName("inhalt")[0]
Damit verlangst Du direkt das erste gefundene Element. Wenn Du die Liste der gefundenen Elemente haben willst musst Du nur [0] weglassen und anschliessend durch die Liste gehen.

Code:
var inh = XMLDATA.responseXML;
var subinh = inh.getElementsByTagName("inhalt");
for (var i=0; i<subinh.length; i++){
  if (subinh[i].nodeType == 3) // 3 steht fuer Textknoten, 1 fuer Elementknoten
     // mir egal mach halt was damit ;)
}
 
Chef de Loup - cooler Name -)

Danke an Dich und an Sven, sehe nun deutlich klarer!

Also wenn Ihr mich fragt, dann benötigt man auch für die ganzen anderen frameworks auch nicht unerheblich Wissen von js usw. Ich dachte am Anfang, dass diese frameworks alles "easy" machen. Aber auf Zuruf klappt da auhc nichts.
Man muß auch dort erstmal die Sprache verstehen, die Idee die hinter den Methoden steht und dann korrekt anwenden.

Ich hatte das Gefühl, dass es für meine hier einfachen Belange ausreicht , wenn ich mich (nach vergeblichen Versuchen ein XML Dokument mit dem SPRY framework auszulesen, da man hier immer Probleme mit sich wiederholenden childNodes hat ) mit dem DOM und js beschäftige. Meine bisherige Kenntnisse vom DOM rühren aber aus Excel wo ich das eine oder andere Dokumente auf XML Dateien basierend erstellte, änderte und wieder wegschrieb. Erst jetzt merkte ich, dass mit dem whitespace man sich ganz schön Arbeit einhandeln kann. Das war mir Excel (aus meiner Laiensicht) so schön einfach durch die Knoten zu loopen. Außerdem waren die Dateien stets sofort verfügbar und mußten nicht erst mit einem Observer abgefangen werden...

Daran mußte ich mich erstmal gewöhnen, oder bin gerade mittendrin -) Ich hatte das zB so verstanden , dass das Dokument mit einer DTD exakt von seinen Inhalten her definiert wird und damit der whitespace ignoriert wird.. kannste ma' sehen, eyh!


Daher vielen vielen Dank für Eure Hilfe und freundlichen Antworten! Großes Kompliment!


viele Grüße aus Bonn


Thorsten
 

Neue Beiträge

Zurück