tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
535
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    eikito eikito ist offline Rookie
    Registriert seit
    Feb 2009
    Beiträge
    5
    Hallo zusammen,
    ich dachte ich hätte den vielleicht richtigen thread auf meine Frage schon gefunden, aber dem war wohl nicht so. Im FF läuft mein Script wunderbar, Daten werden angezeigt, der IE (6,7) zeigt leider keine Werte an. KAnn es sein, das javascript in IE anders parst?
    Falls mir jemand auf die Sprünge helfen kann ... wäre toll!

    Hier mein Script:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    
    <script type="text/javascript">
     
    o = null;
     
    if(window.XMLHttpRequest)
    {
     o = new XMLHttpRequest();
    }
    else if(window.ActiveXObject)
    {
     try
     {
      o = new ActiveXObject('Msxml2.XMLHTTP');
     }
     catch(e1)
     {
      try
      {
       o = new ActiveXObject('Microsoft.XMLHTTP');
      }
      catch(e2)
      {
      }
     }
    }
     
    function xml_checken()
    {
     if(o.readyState == 4 && o.status == 200)
     {
      // document.writeln(o.responseText); // Daten werden im IE ausgegeben!
     }
    }
     
    if(o != null)
    {
     o.open('GET','CountryPricexml.xml',false);
     o.onreadystatechange = xml_checken;
     o.send(null);
    }
     
    x = o.responseXML.documentElement;
    var ergebnisse = x.getElementsByTagName("FuelType");
    // Folgende Zeile wird angemeckert:
    var datum = ergebnisse[0].childNodes[9].firstChild.nodeValue.split("-"); 
    var datum_display = ('Datum: '+datum[0]+ '.' +datum[1]+ '.20' +datum[2]+'<br>');
     
    var display_content_1 = (ergebnisse[0].childNodes[13].childNodes[1].childNodes[1].firstChild.nodeValue + ' Preis: ' + ergebnisse[0].childNodes[1].firstChild.nodeValue + ' - ' + ergebnisse[1].childNodes[13].childNodes[1].childNodes[1].firstChild.nodeValue + ' Preis: ' + ergebnisse[1].childNodes[1].firstChild.nodeValue);
     
    var display_content_2 = (ergebnisse[2].childNodes[13].childNodes[1].childNodes[1].firstChild.nodeValue + ' Preis: ' + ergebnisse[2].childNodes[1].firstChild.nodeValue + ' - ' + ergebnisse[3].childNodes[13].childNodes[1].childNodes[1].firstChild.nodeValue + ' Preis: ' + ergebnisse[3].childNodes[1].firstChild.nodeValue);
     
    var display_content_3 = (ergebnisse[4].childNodes[13].childNodes[1].childNodes[1].firstChild.nodeValue + ' Preis: ' + ergebnisse[4].childNodes[1].firstChild.nodeValue + ' - ' + ergebnisse[5].childNodes[13].childNodes[1].childNodes[1].firstChild.nodeValue + ' Preis: ' + ergebnisse[5].childNodes[1].firstChild.nodeValue);
     
    var display_test = (ergebnisse[1].childNodes[1].firstChild.nodeValue.length);
    var display_ganzzahl = ergebnisse[1].childNodes[1].firstChild.nodeValue;
     
    function Digitalzahl(zahl,name) {
            name = name.replace(/ /g, "_");
            name = ('<img style="margin-left:14px;" src="img/' + name + '.png" />')
        if (zahl.length == 5) {
            zahl1 = zahl.slice(0,zahl.length-4);
            zahl1 = ('<img src="img/' + zahl1 + '.png" />')
            zahl2 = zahl.slice(1,zahl.length-3);
            zahl2 = ('<img style="margin-left:8px;" src="img/' + zahl2 + '.png" />')
            zahl3 = zahl.slice(2,zahl.length-2);
            zahl3 = ('<img style="margin-left:7px;" src="img/' + zahl3 + '.png" />')
            zahl4 = zahl.slice(4,zahl.length-0);
            zahl4 = ('<img style="margin-left:6px; margin-right:7px;" src="img/s' + zahl4 + '.png" />')
            document.writeln(name+zahl1+zahl2+zahl3+zahl4);
        }
        if (zahl.length == 4) {
            zahl1 = 0;
            zahl2 = zahl.slice(0,zahl.length-3);
            zahl3 = zahl.slice(1,zahl.length-2);
            zahl4 = zahl.slice(3,zahl.length-0);
            document.writeln(zahl1+zahl2+zahl3+zahl4);
        }
    }
     
    var Begriff = ergebnisse[1].childNodes[1].firstChild.nodeValue;
    var Extrakt = Begriff.slice(display_test-1);
     
    </script>
     
    </head>
    <body>
     
    <div class="display">
    <div class="datum_display">
    <script type="text/javascript">
    document.writeln(datum_display);
    </script>
    </div>
    <div class="display_numbers" id="eins" style="position:z-index:3;">
    <script type="text/javascript">
        // Folgende Zeile wird angemeckert:
        Digitalzahl(ergebnisse[0].childNodes[1].firstChild.nodeValue, ergebnisse[0].childNodes[13].childNodes[1].childNodes[1].firstChild.nodeValue);
        Digitalzahl(ergebnisse[1].childNodes[1].firstChild.nodeValue, ergebnisse[1].childNodes[13].childNodes[1].childNodes[1].firstChild.nodeValue);
        </script>
    </div>
    <div class="display_numbers" id="zwei" style="z-index:2;">
    <script type="text/javascript">
        // Folgende Zeile wird angemeckert:
        Digitalzahl(ergebnisse[2].childNodes[1].firstChild.nodeValue, ergebnisse[2].childNodes[13].childNodes[1].childNodes[1].firstChild.nodeValue);
        Digitalzahl(ergebnisse[3].childNodes[1].firstChild.nodeValue, ergebnisse[3].childNodes[13].childNodes[1].childNodes[1].firstChild.nodeValue);
        </script>
    </div>
    <div class="display_numbers" id="drei" style="z-index:1;">
    <script type="text/javascript">
        // Folgende Zeile wird angemeckert:
        Digitalzahl(ergebnisse[4].childNodes[1].firstChild.nodeValue, ergebnisse[4].childNodes[13].childNodes[1].childNodes[1].firstChild.nodeValue);
        Digitalzahl(ergebnisse[5].childNodes[1].firstChild.nodeValue, ergebnisse[5].childNodes[13].childNodes[1].childNodes[1].firstChild.nodeValue);
        </script>
    </div>
     

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin,

    hast du mal ein Beispiel für dein XML-Dokument parat?

    Zu dem Unterschied: der IE geht anders mit Knoten um, er ignoriert Textknoten, welche nur aus Whitespaces bestehen, das könnte eine Ursache sein.
     

  3. #3
    eikito eikito ist offline Rookie
    Registriert seit
    Feb 2009
    Beiträge
    5
    Oh ja, natürlich, hätte ich auch gleich posten können ...

    <?xml version="1.0" encoding="UTF-8"?>
    <CountryFuelPrices xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <CountryFuelPrice id="13">
    <Currencies>
    <Currency>
    <Symbol>EUR</Symbol>
    <Name>Euro</Name>
    <Default>Y</Default>
    </Currency>
    <Currency>
    <Symbol>DM</Symbol>
    <Name>Deutche Mark</Name>
    <Default>N</Default>
    </Currency>
    </Currencies>
    <FuelTypes>
    <FuelType key="141">
    <SellingPrice>119.8</SellingPrice>
    <SellingPriceForMargin>119.9</SellingPriceForMargin>
    <ProductPriceForMargin>32.1</ProductPriceForMargin>
    <OtherSellingPrice>119.9</OtherSellingPrice>
    <ModificationDate>22-NOV-06</ModificationDate>
    <MarginCalculationDate>17-NOV-06</MarginCalculationDate>
    <FuelTypeTranslations>
    <FuelTypeTranslation homecategoryid="5005">
    <FuelName>Benzin</FuelName>
    <LocalFuelName>Benzin</LocalFuelName>
    <Octane/>
    </FuelTypeTranslation>
    </FuelTypeTranslations>
    <FuelTypeComponents>
    <FuelTypeComponent id="1">
    <ComponentType>value</ComponentType>
    <ComponentValue>.5011</ComponentValue>
    <FuelComponentTranslations>
    <FuelComponentTranslation homecategoryid="5005">
    <ComponentName>Mineralölsteuer</ComponentName>
    </FuelComponentTranslation>
    </FuelComponentTranslations>
    </FuelTypeComponent>
    <FuelTypeComponent id="2">
    <ComponentType>value</ComponentType>
    <ComponentValue>.1534</ComponentValue>
    <FuelComponentTranslations>
    <FuelComponentTranslation homecategoryid="5005">
    <ComponentName>Ökosteuer</ComponentName>
    </FuelComponentTranslation>
    </FuelComponentTranslations>
    </FuelTypeComponent>
    <FuelTypeComponent id="3">
    <ComponentType>value</ComponentType>
    <ComponentValue>.0046</ComponentValue>
    <FuelComponentTranslations>
    <FuelComponentTranslation homecategoryid="5005">
    <ComponentName>EBV</ComponentName>
    </FuelComponentTranslation>
    </FuelComponentTranslations>
    </FuelTypeComponent>
    <FuelTypeComponent id="4">
    <ComponentType>percent</ComponentType>
    <ComponentValue>16</ComponentValue>
    <FuelComponentTranslations>
    <FuelComponentTranslation homecategoryid="5005">
    <ComponentName>MwSt.</ComponentName>
    </FuelComponentTranslation>
    </FuelComponentTranslations>
    </FuelTypeComponent>
    </FuelTypeComponents>
    </FuelType>
    <FuelType key="1040">
    <SellingPrice>121.9</SellingPrice>
    <SellingPriceForMargin>121.9</SellingPriceForMargin>
    <ProductPriceForMargin>32.6</ProductPriceForMargin>
    <OtherSellingPrice>121.9</OtherSellingPrice>
    <ModificationDate>22-NOV-06</ModificationDate>
    <MarginCalculationDate>17-NOV-06</MarginCalculationDate>
    <FuelTypeTranslations>
    <FuelTypeTranslation homecategoryid="5005">
    <FuelName>Super</FuelName>
    <LocalFuelName>Super</LocalFuelName>
    <Octane/>
    </FuelTypeTranslation>
    </FuelTypeTranslations>
    <FuelTypeComponents>
    <FuelTypeComponent id="9">
    <ComponentType>value</ComponentType>
    <ComponentValue>.5011</ComponentValue>
    <FuelComponentTranslations>
    <FuelComponentTranslation homecategoryid="5005">
    <ComponentName>Mineralölsteuer</ComponentName>
    </FuelComponentTranslation>
    </FuelComponentTranslations>
    </FuelTypeComponent>
    <FuelTypeComponent id="10">
    <ComponentType>value</ComponentType>
    <ComponentValue>.1534</ComponentValue>
    <FuelComponentTranslations>
    <FuelComponentTranslation homecategoryid="5005">
    <ComponentName>Ökosteuer</ComponentName>
    </FuelComponentTranslation>
    </FuelComponentTranslations>
    </FuelTypeComponent>
    <FuelTypeComponent id="11">
    <ComponentType>value</ComponentType>
    <ComponentValue>.0046</ComponentValue>
    <FuelComponentTranslations>
    <FuelComponentTranslation homecategoryid="5005">
    <ComponentName>EBV</ComponentName>
    </FuelComponentTranslation>
    </FuelComponentTranslations>
    </FuelTypeComponent>
    <FuelTypeComponent id="12">
    <ComponentType>percent</ComponentType>
    <ComponentValue>16</ComponentValue>
    <FuelComponentTranslations>
    <FuelComponentTranslation homecategoryid="5005">
    <ComponentName>MwSt.</ComponentName>
    </FuelComponentTranslation>
    </FuelComponentTranslations>
    </FuelTypeComponent>
    </FuelTypeComponents>
    </FuelType>
    <FuelType key="1008">
    <SellingPrice/>
    <SellingPriceForMargin/>
    <ProductPriceForMargin/>
    <OtherSellingPrice/>
    <ModificationDate/>
    <MarginCalculationDate/>
    <FuelTypeTranslations>
    <FuelTypeTranslation homecategoryid="5005">
    <FuelName>Verbleit</FuelName>
    <LocalFuelName>Verbleit</LocalFuelName>
    <Octane/>
    </FuelTypeTranslation>
    </FuelTypeTranslations>
    <FuelTypeComponents/>
    </FuelType>
    </FuelTypes>
    </CountryFuelPrice>
    </CountryFuelPrices>
     

  4. #4
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Jo, es scheint daran zu liegen, das Zählen des Index der childNodes-Collection führt je nach Browser zu anderen Ergebnissen.

    Die Lösung ist aber recht simpel, und auch im Weiteren deiner Anwendung sehr von Vorteil

    So, wie ein Document-Element, besitzen auch Element-Knoten eine Methode getElementsByTagName()

    Du kannst damit also innerhalb eines Knotens anhand des tagNames komfortabel auf bestimmte Kindknoten zugreifen, ohne etwas zählen zu Müssen.

    Bsp.:
    Code :
    1
    2
    3
    4
    
    var x = o.responseXML.documentElement;
    var ergebnisse = x.getElementsByTagName("FuelType");
    // Folgende Zeile wird nicht mehr angemeckert:
    var datum = ergebnisse[0].getElementsByTagName('ModificationDate')[0].firstChild.nodeValue.split("-");

    Das liefert dir aus dem 1. <FuelType> im Dokument den Inhalt des dazugehörigen <ModificationDate>-Kindknotens
     

  5. #5
    eikito eikito ist offline Rookie
    Registriert seit
    Feb 2009
    Beiträge
    5
    Schöne Lösung, superlieben Dank!
    Ich denke den Rest bekomme ich hin.

    Hebe ein Glas auf Dich
     

  6. #6
    eikito eikito ist offline Rookie
    Registriert seit
    Feb 2009
    Beiträge
    5
    Frohen Freitag
    Jetzt frag ich mich nur, warum nach korrekter Änderung des Zugriffs auf die eingebetteten Werte meine Funktion Digitalzahl nicht mehr tut, was sie vorher tat. Nämlich funktionieren.

    Unproblematische Ausgabe:
    document.writeln(ergebnisse[0].getElementsByTagName('FuelName')[0].firstChild.nodeValue + ergebnisse[0].getElementsByTagName('SellingPrice')[0].firstChild.nodeValue);
    Keine Ausgabe:
    Digitalzahl(ergebnisse[0].getElementsByTagName('FuelName')[0].firstChild.nodeValue, ergebnisse[0].getElementsByTagName('SellingPrice')[0].firstChild.nodeValue);
    Verhält sich getElementsByTagName() innerhalb von Funktionen anders?
    Vielen Dank im voraus für eine rettende Antwort!

    edit

    Stop! Hab den Fehler gleich nach versenden des letzten Beitrags gefunden. Werte vertauscht. Sorry! Schönen Tag in die Runde
     

  7. #7
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Deine Funktion Digitalzahl tut etwas, wenn der übergebene Parameter zahl eine length-Eigenschaft mit dem Wert 4 oder 5 hat.

    Du übergibst da mit
    Code :
    1
    
    ergebnisse[0].getElementsByTagName('FuelName')[0].firstChild.nodeValue
    ..den String Benzin.

    Dieser hat eine length-Eigenschaft von 6(weil er aus 6 Buchstaben besteht)...folglich macht die Funktion da nichts.

    <edit> zu spät gestoppt </edit>
     

  8. #8
    eikito eikito ist offline Rookie
    Registriert seit
    Feb 2009
    Beiträge
    5
    Aber Du lagst ja goldrichtig ... Vielen Dank noch mal!
     

Ähnliche Themen

  1. Fehler bei jxl.jar import
    Von DERHAARKAMM im Forum Java
    Antworten: 1
    Letzter Beitrag: 26.01.10, 20:32
  2. Tapestry :: JavaScript - Libs import
    Von Don_Pazo im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 16.05.08, 11:55
  3. Fehler nach jar-Import
    Von WIK-Lars im Forum Java
    Antworten: 5
    Letzter Beitrag: 30.11.06, 09:32
  4. Import von JavaScript-Bibliotheken
    Von TommyMo im Forum Javascript & Ajax
    Antworten: 6
    Letzter Beitrag: 06.04.06, 21:57
  5. Antworten: 4
    Letzter Beitrag: 01.06.04, 10:23

Stichworte