Frage

Was ich versuche zu tun, ein XML-Dokument nehmen, sagen wir mal http://example.org/ data.xml und zeigen sie sie mit einem XSL-Stylesheet angewendet. (Ich kann nicht das Dokument selbst ändern und eine Richtlinie hinzufügen)

Es gibt also ein paar Dienstprogramm XML-Dateien wie folgen aus:

wrapper.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wrapper [
  <!ENTITY content SYSTEM "http://example.org/data.xml">
]>
<?xml-stylesheet type="text/xsl" href="unwrap.xsl" ?>
<wrapper>
  &content;
</wrapper>

unwrap.xsl:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:import href="stylesheet.xsl"/>

  <xsl:template match="/wrapper/node()[1]">
    <xsl:apply-imports/>
  </xsl:template>
</xsl:stylesheet>

Um es zusammenzufassen: stylesheet.xsl geschrieben für http://example.org/data.xml, ist der Browser spitzer zu wrapper.xml und der Benutzer sollte die transformierte http://example.org/ sehen data.xml .

Dies ist einer der seltenen Fälle, in denen die Dinge wie in IE erwartet funktionieren (und Chrome), aber nicht Firefox.

AFAIK Firefox unterstützt externe XML-Entitäten, aber es scheint, wie sie in XSL-Code unsichtbar sind. Ich fand diesen Artikel aus dem Jahr 2006, beschreibt es dieses Problem in Firefox 1.5 (I ‚m mit 3.5.3)

Gibt es eine Abhilfe für dieses?

War es hilfreich?

Lösung

Das XML kommt mir bekannt ;)

Derzeit FireFox wird nicht extern geladen wird DTDs und Entity-Referenzen, wegen der Sicherheit und Denial of Service betrifft . Zum Beispiel: http://en.wikipedia.org/wiki/Billion_laughs

Es gibt einen offenen Mozilla Bug die Gründe beschreiben, warum und langwierige Debatte darüber, ob es nicht machen etwas, das konfigurierbar ist: https: //bugzilla.mozilla. org / show_bug.cgi? id = 22942

Es scheint zu sein Problemumgehung Laden DTDs , , aber ich vermute, dass wahrscheinlich keine gangbare Lösung für Sie .

Firefox lädt local DTD-Dateien

, wenn man sie in diesem Verzeichnis für Windows:

C:\Program Files\Mozilla Firefox\res\dtd\...

Das Verzeichnis für Linux:

/**mileage may vary**/MozillaFirefox/lib/res/dtd/

Eine Idee zu erhalten, um den Entity-Verweis mit: Wenn Sie den Inhalt des wrapper.xml steuern kann, dann könnte man den Inhalt des http://example.org holen /data.xml (Server-Seite) und echo als der vollständige Inhalt der Wrapper-Datei aus, mit dem Zusatz der Stylesheet Processing Instruction (vorausgesetzt, Sie einige dynamischen serverseitige Funktionen haben).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top