Marcus: XML-Parsing, methodischer Ansatz

Hallo liebe Runde,

ein einigermassen generisches XML-Dokument wird via xmlhttp.responseXML geladen:

<?xml version="1.0"?>
<inhalt>
 <element>
  <eigenschaft>
   <typ>Name</typ>
   <wert>Hersteller</wert>
  </eigenschaft>
  <element>
   <eigenschaft>
    <typ>Name</typ>
    <wert>Audi</wert>
   </eigenschaft>
   <element>
    <eigenschaft>
     <typ>Name</typ>
     <wert>Modell</wert>
    </eigenschaft>
    <element>
     <eigenschaft>
      <typ>Name</typ>
      <wert>A3</wert>
     </eigenschaft>
    </element>
   </element>
  </element>
 </element>
</inhalt>

Am Ende des Tages soll z.B. ein Select mit den Namen der Modelle eines bestimmten Herstellers befüllt werden.

Ich hab einen kleinen Knoten im Kopf, wie das XML-Objekt am effizientesten zu durchwandern ist.
Bisherige Ansätze:

1. z.B. nach Tag <element> suchen, Kinder- und etwaige Kindeskinder auf Existenz von Textknoten überprüfen mit Wert des Hersteller-Namens. Bei positiver Übereinstimmung das Select Schritt für Schritt auffüllen.
-> Ziemlicher Amok

2. Mit einer mir derzeit nicht bekannten Methode für XML á la der String-Methode "indexOf" zunächst den Ausdruck anspringen und dann das "nähere Umfeld" dieses Textknotens abtasten.

Scheint mir alles nicht besonders generisch zu sein.
Hat jemand einen konzeptionellen Tip für mich, wie man hier vorgeht?

Vielen Dank & Schöne Grüße!
Marcus

  1. hi,

    Am Ende des Tages soll z.B. ein Select mit den Namen der Modelle eines bestimmten Herstellers befüllt werden.

    Wo genau steht denn bei dir der Hersteller? [1]

    Ist dein XML wirklich _so_ aufgebaut?

    Welche logische Bedeutung sollen das die Elemente <element> und <eigenschaft> haben?
    Wieso sind sie derart ineinander verschachtelt?

    [1] Jetzt sag bitte nicht, "da wo Audi steht" - das sehe ich selbst. Aber wie kennzeichnet dein XML denn, dass es sich bei diesem Wert um den Hersteller handelt?

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hi wahsaga

      Wo genau steht denn bei dir der Hersteller? [1]

      Ziel der Überlegung soll es sein, eine möglichst generische Kombi aus Basisstruktur eines XMLs aufzubauen und der parsenden Komponente auf Applikations(hier: Client-)-Seite um Standardformulare mit unterschiedlichen Datenstrukturen zu befüllen.

      Einen Aufbau á la

      <hersteller>
        <name>Audi</name>
        <modell>
         <name>A3</name>
        </modell>
      </herstelller>

      hatte ich daher zunächst verworfen.
      Die logische Information besteht also derzeit in der Aussage, dass z.B. ein <element> mit der <eigenschaft> vom <typ> "Name" mit dem <wert> "Audi" einen Elternknoten hat der bei ähnlicher Durchforstung "Hersteller" sein könnte.

      Lass mich da aber gerne eines besseren Belehren (würde die Arbeit nämlich ungemein erleichtern...;)

      Danke & Viele Grüße!

      1. hi,

        Einen Aufbau á la

        <hersteller>
          <name>Audi</name>
          <modell>
           <name>A3</name>
          </modell>
        </herstelller>

        hatte ich daher zunächst verworfen.

        Wäre das nicht eher sowas:

        <auto>
          <hersteller>Audi</hersteller>
          <modell>A3</modell>
        </auto>

        Die logische Information besteht also derzeit in der Aussage, dass z.B. ein <element> mit der <eigenschaft> vom <typ> "Name" mit dem <wert> "Audi" einen Elternknoten hat der bei ähnlicher Durchforstung "Hersteller" sein könnte.

        Den Ansatz des "generischen XMLs", welches letztlich nur aus ein paar Elementen besteht, in denen Daten "irgendwie zusammengehalten" werden sollen, finde ich suboptimal.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hi

          Wäre das nicht eher sowas:

          <auto>
            <hersteller>Audi</hersteller>
            <modell>A3</modell>
          </auto>

          »»

          Klar ginge auch, ich hatte angesichts der primären Hersteller-Perspektive des Formulares einen Hersteller-Baum gebildet damit nicht durch alle Autos gegrast werden muss.

          Optimal wäre eigentlich die Möglichkeit des RDF-Requests...;)

          Den Ansatz des "generischen XMLs", welches letztlich nur aus ein paar Elementen besteht, in denen Daten "irgendwie zusammengehalten" werden sollen, finde ich suboptimal.

          Geht mir inzwischen ähnlich, ein reiner Datencontainer ohne leicht erreichbare Logik führt eher gegen die Wand.

          Danke & Viele Grüße!

        2. Hello out there!

          Den Ansatz des "generischen XMLs", welches letztlich nur aus ein paar Elementen besteht, in denen Daten "irgendwie zusammengehalten" werden sollen, finde ich suboptimal.

          ACK. Wozu gibt’s denn RDF? [RDF Primer]

          See ya up the road,
          Gunnar

          --
          “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
          1. Hallo Gunnar,

            ACK. Wozu gibt’s denn RDF?

            definitive Zustimmung, mein Traum wäre es die Logik in Protegé zu modellieren und inkl. PAL-Constraints als RDF zu exportieren.
            Nur: Vor dem m.E. dann notwendigen RDF-Parser auf Clientseite hab ich ehrlich gesagt ziemlichen Respekt...;)

            Danke & Viele Grüße!
            Marcus

            1. Hallo,

              Nur: Vor dem m.E. dann notwendigen RDF-Parser auf Clientseite hab ich ehrlich gesagt ziemlichen Respekt...;)

              Dazu wuerde ich eine clientseitige XSL-Transformation gegenueber dem reinen Abarbeiten mittels DOM-Zugriffen vorziehen. Ein XML-Objekt gibt es aus dem AJAX-Request bereits, ein zweites XSL-Objekt wird ebenfalls via XMLHttpRequest oder XMLHTTP geladen und dann entsprechend auf das XML-Objekt angewendet. Ließe sich mit den vorhandenen Mitteln im IE, Firefox und neueren Operas umsetzen.

              Transformiert wird dann nur in ein Dokumentfragment (also das genannte select-Element) und dieses in den HTML-DOM-Baum eingehaengt.

              MfG, Thomas

              1. Hallo Thomas,

                sehr guter Plan, das probier ich aus!
                Danke & Viele Grüße!
                Marcus