1

入力 XML ドキュメントを XSLT 経由で XHTML に変換したいと考えています。私のスタイルシートでは、次の属性で xsl:output を使用しています。

<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" />

XML Copy Editor や Editix などのエディターで XSLT Processor を使用すると、XTHML 1.0 Strict への変換は正常に機能します。コマンド ライン xsltproc を使用しても、期待どおりに動作します。

しかし、スタイルシート ("myfile.xsl") を元の XML ドキュメント ("myfile.xml") にリンクすると、次のようになります。

<?xml-stylesheet type="text/xsl" href="myfile.xsl"?>

主要なブラウザー (Chrome、IE、または Mozilla) で "myfile.xml" を見ようとすると、予想される XHTML で XML ドキュメントを変換する機能はありません。ただし、Opera では完全に機能します。

私の XSLT (つまり、xsl:output) に何か問題がありますか、それとも主要なブラウザー (IE、Chrome、Mozilla) の XSLT 実装に問題がありますか?

で属性 method="xml" を使用した場合にのみ問題が発生します。method="html" を使用すると、すべてのブラウザーで動作します。しかし、HTML ではなく XHTML を生成する必要があるため、xsl:output で doctype-system および doctype-public 属性とともに method="xml" を使用します。

4

4 に答える 4

2

ブラウザがどのように失敗するかについて、あなたは実際には教えてくれませんでした。XHTML 出力を作成する場合は、結果要素に XHTML 名前空間を使用していることを確認してください。

<xsl:stylesheet
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">

<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" />


<xsl:template match="/">
  <html>...<xsl:apply-templates/>...</html>
</xsl:template>

</xsl:stylesheet>

コードで、結果の要素が XHTML 要素であることを確認します (「html」のようなローカル名を持つが、XHTML として認識できない、名前空間のない XML 要素ではありません)。

私は、Firefox/Mozilla ブラウザーが出力メソッドを使用しxmlて XHTML 要素を認識することを確信しています。また、IE 9 と 10 についても、XHTML のサポートが制限されている古いバージョンの IE が機能するかどうかはわかりません。

例を挙げると、XML 入力http://home.arcor.de/martin.honnen/xslt/test2013040601.xmlは、 http://home.arcor.de/martin.honnen/xslt/test2013040601xml経由で出力に変換されます。 .xslであり、Windows 8 上の IE 10 および現在のバージョンの Firefox と Chrome で正常に動作します。

于 2013-04-06T13:15:20.720 に答える
2

xml-stylesheet PI を使用して変換を実行する場合、ほとんどのブラウザは出力をシリアライズしないと思います。結果ツリーを作成してレンダリングするだけです。結果ツリーをシリアライズしていない場合は、当然 xsl:output 宣言を無視する必要があります。

于 2013-04-06T13:09:35.793 に答える
0

クライアント側 XSLT にはいくつかの根本的な問題があります。

  • XHTML doctype URL はIEの W3C によってブロックされるため、パッチが必要です。
  • FirefoxのXMLシリアライザーは XHTML の出力に使用されるため、XHTML 名前空間が使用されていない場合はテキストにフォールバックします。
  • 属性はChrome の場合と同様に定義media-typeする必要がありますtext/html

として保存すると機能する自己参照スタイルシートを次に示しますhtml5.xml

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="html5.xml"?>
<xsl:stylesheet version="1.0"
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml"
            >
<xsl:output method="xml" encoding="utf-8" version="" indent="yes" standalone="no" media-type="text/html" omit-xml-declaration="no" doctype-system="about:legacy-compat" />

<xsl:template match="xsl:stylesheet">
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="/">
  <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    </head>
    <body>
      <xsl:text>hi</xsl:text>
    </body>
  </html>
</xsl:template>

</xsl:stylesheet>

他のクロスブラウザーの問題を説明するいくつかの無関係な質問を次に示します。

参考文献

于 2013-08-21T00:01:29.683 に答える
-1

ほとんどのブラウザーは XSLT 1.0 のみをサポートしています。SaxonCE を調べて、XSLT 2.0 のサポートを追加する必要があります。

Saxon-CE (クライアント エディション) は、Web ブラウザーで使用するための XSLT 2.0 の Saxonica の実装です。

特徴

XPath 2.0のサポートに注意してください。

于 2013-04-06T12:50:31.780 に答える