Question

Ce que je suis en train de faire est de prendre un document XML, disons http://example.org/ data.xml et montrez-la avec une feuille de style XSL appliquée. (Je ne peux pas modifier le document lui-même et ajouter une directive)

Donc, il y a quelques fichiers XML utilitaires comme ceci:

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>

Donc, pour résumer: stylesheet.xsl est écrit pour http://example.org/data.xml, le navigateur est pointé wrapper.xml et l'utilisateur doit voir le http://example.org/ data.xml .

Ceci est l'un de ces rares cas où les choses fonctionnent comme prévu dans IE (et Chrome), mais pas Firefox.

Firefox prend en charge les entités AFAIK XML externes, mais il semble qu'ils sont invisibles dans le code XSL. J'ai trouvé cet article à partir de 2006, il décrit ce problème dans Firefox 1.5 (I « utilise 3.5.3)

Y at-il solution de contournement pour cela?

Était-ce utile?

La solution

que XML semble familier;)

À l'heure actuelle, FireFox ne se charge pas des références DTD externes et de l'entité, en raison de la sécurité et le déni des problèmes de service . Par exemple: http://en.wikipedia.org/wiki/Billion_laughs

Il est un marché ouvert bug Mozilla décrivant les raisons pour lesquelles et long débat si oui ou non pour en faire quelque chose qui est configurable: https: //bugzilla.mozilla. org / show_bug.cgi? id = 22942

Il semble y avoir un solution de contournement à chargement DTDs , mais je devine qui est probablement pas une solution viable pour vous .

Firefox chargera fichiers locaux DTD

si vous les mettez dans ce répertoire pour Windows:

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

Le répertoire pour Linux:

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

Une idée de se déplacer en utilisant la référence de l'entité: Si vous pouvez contrôler le contenu de la wrapper.xml, alors vous pouvez récupérer le contenu de http://example.org /data.xml (côté serveur) et l'écho comme le contenu complet du fichier d'emballage, avec l'ajout de l'instruction de traitement des feuilles de style (en supposant que vous avez des capacités dynamiques côté serveur).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top