Kai: Entites in XML auslesen

Hallo,

weiß jemand wie ich aus dem Javascript heraus, die Entities im XML auslesen könnte?

Wäre super, wenn jmd ne Idee hätte, find irgendwie nichts im Internet dazu :(

Gruß Kai

  1. Hätte vielleicht bissl genauer schreiben sollen.

    <?xml version="1.0"?>
    <!--PUBLIC "-//AECMA//DTD AECMA 1000D IPD 20010401//EN"-->
    <!DOCTYPE DMODULE SYSTEM "dm_aecma_avee_i_190.dtd" [
    <!ENTITY test SYSTEM "dies_ist_eine_Graphik.cgm" NDATA cgm>
    ]>
    ....
    <graphic
    boardno="test"

    </graphic>

    ....

    also ich habe das Attribut boardno ausgelesen. Ich bräuchte eine Funktion, wo man dann das Entity "test" auslesen würde, um "dies_ist_eine_Graphik.cgm" zurückzubekommen, um zu wissen, welche Graphik ich anzeigen soll.

    Hoffe es ist jetz bissl klarer und jmd kann mir einen Tippp geben :)
    Gruß Kai

    1. <graphic boardno="test"></graphic>

      Ich bräuchte eine Funktion, wo man dann das Entity "test" auslesen würde

      Ich sehe kein Entity "test". Ich sehe nun den Text "test". Das ist ein himmelweiter Unterschied.

      1. wieso da hab ich das entity doch definiert

        <!DOCTYPE DMODULE SYSTEM "dm_aecma_avee_i_190.dtd" [
        <!ENTITY test SYSTEM "dies_ist_eine_Graphik.cgm" NDATA cgm>
        ]>

        Ich dachte, ich könnte das Attribut boardno auslesen und dann das Entity mit dem ausgelesenem boardno-Wert über ne Funktion bekommen. sowas in die Richtung eben

        getValue(ausgelesener Boardno-Wert) und zurück bekomme ich dies_ist_eine_Graphik.cgm

        oder gibts sowas nicht?
        Gruß Kai

        1. Hallo kai.

          wieso da hab ich das entity doch definiert

          <!DOCTYPE DMODULE SYSTEM "dm_aecma_avee_i_190.dtd" [
          <!ENTITY test SYSTEM "dies_ist_eine_Graphik.cgm" NDATA cgm>
          ]>

          Das mag sein, doch du hast nirgends &test; notiert.

          Einen schönen Montag noch.

          Gruß, Mathias

          --
          ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
          debian/rules
          1. ja wenn man den Wert als Attribut verwendet, muss ich doch nicht &test; nehmen, sondern Attributname="Name des Entities", daher ja boardno="test".

            Außerdem möchte ich doch nur über Javascript die Entities oben auslesen, also löse mir über Javascript das Entity "test" auf, dass ich folgendes zurückbekomme(in meinem Bsp) dies_ist_eine_Graphik.cgm

            Gruß Kai

            1. ja wenn man den Wert als Attribut verwendet, muss ich doch nicht &test; nehmen, sondern Attributname="Name des Entities", daher ja boardno="test".

              Wenn du in der DTD eine Entity definierst, dann sagst du: Irgendwo im Quelltext taucht die Zeichenfolge "&entityname;" auf, die bitte zu ersetzen ist durch die Entitydefinition hier.

              Keine Entity (inklusive Und-Zeichen und Semikolin) = keine Ersetzung.

              Das, was du willst, wird also niemals funktionieren, wenn du nicht &test; schreibst - auch ins Attribut!

              Außerdem möchte ich doch nur über Javascript die Entities oben auslesen, also löse mir über Javascript das Entity "test" auf, dass ich folgendes zurückbekomme(in meinem Bsp) dies_ist_eine_Graphik.cgm

              Wenn du einfach die Entity als Entity ins Attribut schreiben würdest, würde die XML-Engine das für dich möglicherweise schon von ganz alleine auflösen, ohne dass du mit Javascript auch nur einen Finger krumm machen mußt.

              Wenn du hingegen darauf verzichten möchtest, ins Attribut "&test;" zu schreiben, und auf "test" beharren willst, wird dir nichts anderes übrig bleiben, als dich von der Möglichkeit zu verabschieden, dass du mit der Entitydefinition irgendwas bewirken kannst. Stattdessen wirst du in Javascript irgendwie eine Übersetzungstabelle integrieren müssen, die bewirkt, dass gewisse Attributwerte (wie z.B: "test") umgesetzt werden in gewisse andere Werte (wie z.B. eine relative Grafik-URL).

              1. Ok verstehe ;) danke für die ausführliche Antwort

                nur wenn ich &test; als Attributwert verwende, dann bekomm ich folgende Fehlermeldung:

                Eine nicht analysierte Entität 'test' kann nicht in einem Entitätsverweis verwendet werden.

                also wenn ich die xml-datei ohne xsl, einfach ohne xsl-Eintrag im Internet Explorer anzeigen lasse. Die zugehörige Dtd ist aber im gleichen Verzeichnis wie die xml-Datei. Habt ihr ne Ahnung, was ich da noch falsch gemacht haben könnte?

                Gruß Kai

                1. Eine nicht analysierte Entität 'test' kann nicht in einem Entitätsverweis verwendet werden.

                  Ich weiß nicht, wie gut oder schlecht die XML-Fähigkeiten des IE sind. Möglich, dass er mit selbstdefinierten Entitys ein Problem hat.

                  1. Also eigentlich wollt ich ja sowas in die Art nur für Javascript und nicht für XSL, weil da verwende ich es ja auch schon so wie hier beschrieben. kann mir net vorstellen, dass es bei xsl sowas gibt, aber bei javascript net :(

                    http://de.selfhtml.org/xml/darstellung/xpathfunktionen.htm#unparsed_entity_uri

                    unparsed-entity-uri() (ungeparste Einträge der DTD ermitteln)
                    Erlaubt es, auf DTD-Einträge zuzugreifen, die vom Parser nicht analysiert wurden. Dies betrifft vor allem Entities für externe Ressourcen.

                    Erwartet folgende Argumente:

                    [Name] Der Name des nicht geparsten DTD-Eintrags (Entities).

                    Liefert den URI des Entities zurück, der hinter SYSTEM oder PUBLIC angegeben ist. Die entsprechende Adresse kann dann im Ergebnisbaum an eine geeignete Stelle eingesetzt werden.

                    Beispielauszug aus einer DTD:
                    <!ENTITY firmenlogo SYSTEM "images/logo.jpg" NDATA JPEG>

                    Beispielauszug aus einer entsprechenden XML-Datei:
                    <bild quelle="firmenlogo" />

                    Beispielauszug aus einem zugehörigen XSL-Stylesheet:
                    <xsl:template match="bild">
                     <img src="{unparsed-entity-uri(@quelle)}" alt="Firmenlogo" />
                    </xsl:template>

                    1. Vielleicht würd es ja auch irgendwie über

                      var xmlSource=new ActiveXObject("MSXML.DOMDocument");
                      xmlSource.async=false;
                      xmlSource.validateOnParse = false; // ### V03 ###
                      bReturn=xmlSource.load("/test/test.xml");
                      if( bReturn ) {
                        parent.Text.document.open();
                        parent.Text.document.write(xmlSource.transformNode(cs.XMLDocument));
                        parent.Text.document.close();
                        alert(xmlSource.xml);
                      }

                      irgendwie darüber gehen, denn bei xmlSource.xml gibt er ja die komplette Datei aus. Vielleicht gibts da ja irgendwelche Funktionen, wo man die Entities dann auslesen könnte. aber hab bisher nix gefunden. kennt sich damit jmd aus?

                      Gruß Kai

                      1. Hallo,

                        habe die Lösung gefunden, vielleicht hilft sie ja auch jmd anderem :) konnt meine xml auch so lassen&musste die Entities nicht ändern, habe also unparsed Entities in meinen XML-Dateien und so kann man sie auslesen.

                        var xmlSource=new ActiveXObject("MSXML.DOMDocument");
                        xmlSource.async=false;
                        xmlSource.validateOnParse = false; // ### V03 ###
                        bReturn=xmlSource.load("/test/test.xml");
                        if( bReturn ) {
                          parent.Text.document.open();
                          parent.Text.document.write(xmlSource.transformNode(cs.XMLDocument));
                          parent.Text.document.close();
                          var strBoardno = xmlSource.selectSingleNode("//@boardno").text;
                          alert(xmlSource.doctype.entities.getNamedItem(strBoardno).attributes[0].nodeValue);
                        }

                        wenn man zB xmlSource.doctype.entities.getNamedItem(strBoardno).xml sich ausgeben lässt, dann wird das komplette definierte Entity ausgegeben, bei mir hab ich eben genau das 1.Attribut im Entity gebraucht. also gehts doch mit Javascript :)))

                        Vielen Dank für die netten Versuche mir zu helfen ;)
                        Gruß Kai

  2. Tach Kai,

    weiß jemand wie ich aus dem Javascript heraus, die Entities im XML auslesen könnte?

    Sofern überhaupt unterstützt, dann so (funktioniert z. B. im Adobe SVG Viewer):

    document.doctype.entities.getNamedItem("entityname").firstChild.nodeValue

    Man liest sich,
    svg4you

    1. Hallo svg4you,

      hab deinen Beitrag eben erst gesehen, bisher verwenden wir aber nicht das Adobe svg-Plugin - ich schätze mal, dass der Aufruf nur funktioniert, wenn das Plugin installiert ist oder?

      Gruß Kai

      1. Tach Kai,

        ... bisher verwenden wir aber nicht das Adobe svg-Plugin - ich schätze mal, dass der Aufruf nur funktioniert, wenn das Plugin installiert ist oder?

        Ja, sofern es um die XML/Entities-Verarbeitung innerhalb von SVG-Dokumenten geht.

        Ansonsten sieht es in den Browsern eher schlecht aus, auf die Schnelle bekomme ich nur unter Opera 9.x ein sinnvolles Ergebnis für
        alert(document.doctype.entities)

        Allerdings klappt der Zugriff dann doch nicht, die length-Eigenschaft bleibt 0.

        Man liest sich,
        svg4you