Birgit Egger: XML und IE

Hi,

ich befass mich jetzt schon länger mit unterem Beispiel, hab aber keine Ahnung was ich falsch mache, Ich hab einen XML String und wenn ich den IE verwende, wandle ich den String in ein Microsoft DOM- Object um.
Dananch möchte ich die einzelnen TextTags auslesen, was mir aber nicht gelingt.
Mit dem Firefox klappts einwandfrei, mit dem IE gar nicht - find dürfte nicht gehen mit dem IE.
Vielleicht könnte mir jemand helfen.
Vielen Dank,

lg
Birgit

  
<html>  
<head>  
	<script language="javascript" type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>  
	<script type="text/javascript">  
	  
		function testXml() {  
			var theXml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><eventdata><runningname>Das ist der Runningname- Text</runningname><runninginfo>Das ist die Runningnameinfo</runninginfo><cateringinfo>Das ist die Cateringinfo</cateringinfo><trackprofileinfo>Das ist die trackprofileinfo</trackprofileinfo><arrivalinfo>null</arrivalinfo><parkinginfo>null</parkinginfo><hotelinfo>null</hotelinfo><tracklink></tracklink><eventDataComments><eventDataComment><postername>Postername</postername><postertime>2011-12-19 18:56:16.0</postertime><comment>asdfasdfasdfasf<br></comment></eventDataComment></eventDataComments></eventdata>";		  
			theXml = parseXml(theXml);	  
			var runningname = $(theXml).find('runningname').text();  
			alert('Das ist der runningname: ' + runningname);  
			}  
  
		function parseXml(xml) {	  
			if (jQuery.browser.msie) {  
				var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");  
				xmlDoc.loadXML(xml);  
				xml = xmlDoc;  
				}  
			return xml;  
			}  
	</script>  
	  
</head>  
<body>  
	<input type="button" name="TestButton" value="TestButton" onclick="testXml()" />  
</body>  
</html>  

  1. Kann mir da niemand helfen, ist sogar ein ausführbares Programm,
    Ich komm einfach nicht drauf wie ich das im IE zum laufen bringe.
    Vielen Dank für Eure Hilfe,
    lg
    Birgit

    1. Kann mir da niemand helfen, ist sogar ein ausführbares Programm,
      Ich komm einfach nicht drauf wie ich das im IE zum laufen bringe.
      Vielen Dank für Eure Hilfe,

      Für Drängler gibts leider nur kurze Antworten: RTFMhttp://api.jquery.com/jQuery.ajax/

  2. Grüße dich, Birgit,

    deinem Dokument fehlt eine Doctype-Angabe. Der IE befindet sich also im Quirksmodus und verhält sich wie IE 5.5.

    Gruß, Daniel

  3. Hallo,

    ich befass mich jetzt schon länger mit unterem Beispiel, hab aber keine Ahnung was ich falsch mache, Ich hab einen XML String und wenn ich den IE verwende, wandle ich den String in ein Microsoft DOM- Object um.
    Dananch möchte ich die einzelnen TextTags auslesen, was mir aber nicht gelingt.
    Mit dem Firefox klappts einwandfrei, mit dem IE gar nicht - find dürfte nicht gehen mit dem IE.

    das Beispiel sollte idealerweise in *keinem* Browser funktionieren, auch nicht in Firefox, Safari oder Chrome ...

    Dass es im IE nicht funktioniert, liegt in diesem Fall an der geringeren Fehlertoleranz des Microsoft'schen XML-Parsers und daran, dass der von Dir angewandte Workaround für jQuery-Bug #3143 davon ausgeht, dass die Aufrufvoraussetzungen von jQuery.parseXML() erfüllt sind:

    jQuery.parseXML( data )
    data: well-formed XML string to be parsed

    » var theXml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><eventdata><runningname>Das ist der Runningname- Text</runningname><runninginfo>Das ist die Runningnameinfo</runninginfo><cateringinfo>Das ist die Cateringinfo</cateringinfo><trackprofileinfo>Das ist die trackprofileinfo</trackprofileinfo><arrivalinfo>null</arrivalinfo><parkinginfo>null</parkinginfo><hotelinfo>null</hotelinfo><tracklink></tracklink><eventDataComments><eventDataComment><postername>Postername</postername><postertime>2011-12-19 18:56:16.0</postertime><comment>asdfasdfasdfasf<br></comment></eventDataComment></eventDataComments></eventdata>";

    theXml enthält in diesem Beispielcode kein wohlgeformtes XML. Daher schlägt im IE der Aufruf von loadXML fehl.

    » 		function parseXml(xml) {	  
    
    > 			if (jQuery.browser.msie) {  
    > 				var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");  
    > 				xmlDoc.loadXML(xml);  
      
    // var success = xmlDoc.loadXML(xml)  
    // hilft beim Debuggen: liefert bei Deinem Beispiel nämlich false  
      
    
    > 				xml = xmlDoc;  
    > 				}  
    > 			return xml;  
    > 			}  
    
    

    Tipp:
    Der Datenfehler befindet sich im <comment>-Element. Entferne es (mit Inhalt) - und Dein Code wird laufen. Dessen Inhalt darf - mit dem von Dir aufgeführten Beispieltext - <http://de.selfhtml.org/xml/regeln/zeichen.htm#cdata@title=nicht interpretiert> werden, damit das XML gültig ist. Behandle den Inhalt des <comment>-Elementes - und Dein Code wird laufen.

    Selbstverständlich ist es, wie Daniel anführt, in nahezu allen Fällen eine gute Idee, Browser nicht in den Quirksmodus zu schicken - egal welchen.

    Freundliche Grüße

    Vinzenz

    1. Hallo,

      OK, ich darf keine tags (<tags>) zwischen den Tag haben, Das ist aber schlecht, da ich von einem Editor aus den eingebenenen Text in die Datenbank speichere und es da auch Zeilenumbrüche usw. gibt.

      Und ich bekomm auch <eventDataComments> nicht raus.
      Weiß vielleicht jemand wie ich das am Besten machen kann?

      lg
      Birgit

      1. Hallo,

        OK, ich darf keine tags (<tags>) zwischen den Tag haben, Das ist aber schlecht, da ich von einem Editor aus den eingebenenen Text in die Datenbank speichere und es da auch Zeilenumbrüche usw. gibt.

        Du kannst schon tags in tags verwenden, sie müssen eben wohlgeformt sein:

        <comment><p>asdfasdfasdfasf</p></comment> wäre z.B. eine Möglichkeit.

        VG

        1. Aber wie kann ich dann einen Zeilenumbruch zwischen Tags haben?
          Ein Zeilenumbruch beteht ja nur aus <br>?
          lg

          1. Aber wie kann ich dann einen Zeilenumbruch zwischen Tags haben?
            Ein Zeilenumbruch beteht ja nur aus <br>?
            lg

            <p></p>macht Dir doch einen neuen Absatz und nach einem Absatz beginnt eine neue Zeile (stylen mit css).
            Und <br></br> wäre konform (auch wenn man mich dafür steinigt hier)
            und beides kannst Du so in Deiner DB abspeichern.

            VG

            1. Hi,

              Und <br></br> wäre konform (auch wenn man mich dafür steinigt hier)

              <br/> auch.

              ~dave

      2. Hallo Birgit,

        OK, ich darf keine tags (<tags>) zwischen den Tag haben, Das ist aber schlecht, da ich von einem Editor aus den eingebenenen Text in die Datenbank speichere und es da auch Zeilenumbrüche usw. gibt.

        typische Zeilenumbrüche sind absolut problemlos, das HTML- oder XHTML-Element für eine neue Zeile dagegen schon.

        Ich weiß jetzt nicht, wie Dein Anwendungsszenario genau aussieht, aber in einer Datenbank speichere ich normalerweise Rohtext. Da sind Zeilenumbrüche eben normale Zeilenumbrüche und keine br-Elemente. Die Behandlung solcher Zeilenumbrüche erfolgt bei der Ausgabe, d.h. Dein Javascript könnte aus solchen Zeilenumbrüchen br-Elemente machen, sei es im HTML- oder im XHTML-Stil.

        Vielleicht hilft Dir beim Verständnis dieses Problems dedlfix' ausgezeichnete Ausführungen zum Kontextwechsel. auch wenn sich der von mir verlinkte Artikel hauptsächlich auf PHP/MySQL bezieht, so gelten die Grundregeln immer und überall.

        Freundliche Grüße

        Vinzenz