Entites in XML auslesen
Kai
- javascript
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
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
<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.
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
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
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
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).
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
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.
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>
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
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
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
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
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