1

私がやろうとしているのは、XML ドキュメントを取り、たとえばhttp://example.org/data.xmlと言って、XSL スタイルシートを適用して表示することです。(ドキュメント自体を変更してディレクティブを追加することはできません)

したがって、次のようなユーティリティ XML ファイルがいくつかあります。

ラッパー.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>

要約すると、stylesheet.xsl はhttp://example.org/data.xml用に作成され、ブラウザーは wrapper.xml を指し、ユーザーには変換されたhttp://example.org/data.xmlが表示されます。

これは、IE (および Chrome) では期待どおりに機能するが、Firefox では機能しないというまれなケースの 1 つです。

AFAIK Firefox は外部 XML エンティティをサポートしていますが、XSL コードでは見えないようです。2006 年のこの記事を見つけました。Firefox 1.5 でのこの問題について説明しています (私は 3.5.3 を使用しています)。

これに対する回避策はありますか?

4

1 に答える 1

1

そのXMLは見覚えがあります;)

現在、FireFoxは、セキュリティとサービス拒否の懸念があるため、外部DTDとエンティティ参照をロードしません。例: http: //en.wikipedia.org/wiki/Billion_laughs

構成可能なものにするかどうかについての理由と長い議論を説明する未解決のMozillaバグがあります: https ://bugzilla.mozilla.org/show_bug.cgi?id = 22942

DTDをロードするための回避策は1つあるように見えますが、おそらくそれは実行可能な解決策ではないと思います

FirefoxはローカルDTDファイルをロードします

Windowsの場合、これらをこのディレクトリに配置すると、次のようになります。

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

Linuxのディレクトリ:

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

エンティティ参照を使用して回避する1つのアイデア: wrapper.xmlのコンテンツを制御できる場合は、http://example.org/data.xml(サーバー側)のコンテンツをフェッチして、次のようにエコーアウトできます。ラッパーファイルの完全な内容と、スタイルシート処理命令の追加(動的なサーバー側の機能があることを前提としています)。

于 2009-10-03T17:49:19.087 に答える