JürgenB: Zugriff auf Tags mit ":" im Tagnamen

Hallo,

ich lese mit AJAX (genaugenommen mit "GDownloadUrl" und "GXml.parse" aus der Google Maps API) eine xml-Datei im GPX-Format ein. Aus dieser Datei lese ich die gewünschte Werte mit der DOM-Methode getElementsByTagName. Allerdings sind in dieser xml-Datei auch "extensions", die sich dadurch auszeichnen, das in ihren Tagnamen ein ":" vorkommt, also z.B. "gpxx:rpt".

Der Versuch, auch auf diese Elemente per getElementsByTagName zuzugreifen, funktioniert zwar im IE (7), nicht aber im Firefox. Hier werden sie einfach nicht gefunden (length=0). Daher vermute ich, das ich da was falsch mache. Wenn ich mich mit childNodes zu den Elementen durchhangele, werden sie gefunden und im nodeName steht auch das richtige.

Kann mir jemand zeigen, wie ich auch auf die Elemente mit dem ":" im Namen zugreifen kann?

Gruß, Jürgen

  1. Hi,

    ich lese mit AJAX (genaugenommen mit "GDownloadUrl" und "GXml.parse" aus der Google Maps API) eine xml-Datei im GPX-Format ein. Aus dieser Datei lese ich die gewünschte Werte mit der DOM-Methode getElementsByTagName. Allerdings sind in dieser xml-Datei auch "extensions", die sich dadurch auszeichnen, das in ihren Tagnamen ein ":" vorkommt, also z.B. "gpxx:rpt".

    Du meinst, die einen Namespace vor dem element name haben.

    Der Versuch, auch auf diese Elemente per getElementsByTagName zuzugreifen, funktioniert zwar im IE (7),

    Dem IE ist aber auch wirklich alles zuzutrauen.

    nicht aber im Firefox.

    Natürlich nicht.

    getElementByNameNS ist das, was Du brauchst, um auf Elemente im Namespace zuzugreifen.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hallo MudGuard,

      danke für das Stichwort "Namespace".

      getElementByNameNS ist das, was Du brauchst, um auf Elemente im Namespace zuzugreifen.

      liefert in der Fehlerkonsole leider "... is not a Function". Hast du mal einen Link zur Doku? Bei google habe ich nichts brauchbares gefunden. Nur eine Java-Klasse.

      Gruß, Jürgen

      1. Hello out there!

        Hast du mal einen Link zur Doku?

        Hast du mich auf der Blacklist?

        Ich schätze, MudGuard meinte auch 'getElementsByTagNameNS'.

        See ya up the road,
        Gunnar

        --
        „Und [dieses Forum] soll […] auch ein Fachforum bleiben und kein Psychologieforum werden.“ (Kirsten Evers)
        1. Hallo Gunnar,

          Hast du mal einen Link zur Doku?

          nein. Aber ich antworte chronologisch.

          Gruß, Jürgen

  2. Hello out there!

    "extensions", die sich dadurch auszeichnen, das in ihren Tagnamen ein ":" vorkommt, also z.B. "gpxx:rpt".

    Du meinst Namensräume? [SELFHTML, XML-NAMES]

    Kann mir jemand zeigen, wie ich auch auf die Elemente mit dem ":" im Namen zugreifen kann?

    getElementsByTagNameNS() [Mozilla]

    See ya up the road,
    Gunnar

    --
    „Und [dieses Forum] soll […] auch ein Fachforum bleiben und kein Psychologieforum werden.“ (Kirsten Evers)
    1. Hallo Gunnar,

      auch dir vielen Dank für das Stichwort "Namensräume".

      getElementsByTagNameNS() [Mozilla]

      funktioniert das auch Browserübergreifend?

      Bei der Suche nach einer Doku zu getElementByNameNS (siehe Antwort von MudGuard) habe ich übrigens gefunden, das man bei getElementsByTagname den Namensraum einfach weglassen kann. Funktioniert zumindestens im FF.

      Gruß, Jürgen

  3. Hallo,

    ich habe das jetzt mal unter Windows XP getestet:

    getElementByTagNameNS:
    funktioniert unter FF (2.0.0.7), Opera (9.1) und Safari (3.0.3).
    IE (7) meldet: Zeile ... Das Objekt unterstützt diese Eigenschaft oder Methode nicht.

    getElementsByTagName(Namensraum:Name):
    geht nur im IE

    getElementsByTagName(Name):
    geht im FF, der IE findet das Element nicht.

    Ich werde mir wohl ein myGetElementsByTagNameNS basteln müssen.

    Gruß, Jürgen

    1. Hello out there!

      Ich werde mir wohl ein myGetElementsByTagNameNS basteln müssen.

      Nö, du müsstest bloß dem IE getElementByTagNameNS() beibringen, so in der Art:

      if (!foo.getElementByTagNameNS)  
      {  
        foo.getElementByTagNameNS = function (ns, tagName)  
        {  
          return foo.getElementByTagName("gpxx:" + tagName);  
        }  
      }
      

      See ya up the road,
      Gunnar

      --
      „Und [dieses Forum] soll […] auch ein Fachforum bleiben und kein Psychologieforum werden.“ (Kirsten Evers)