3

クライアント側の xslt を使用して xml ファイルを xhtml に変換しています。いくつかのハードルがありましたが、これを除いてすべて通過することができました。

問題は、このような単純なxmlファイルがある場合です

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="./jsInFf.xsl"?>
<root>hello</root>

このような単純なxslでxhtmlに変換します

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xhtml="http://www.w3.org/1999/xhtml"
  xmlns="http://www.w3.org/1999/xhtml">

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

  <xsl:template match="/">
    <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
        <title>a title</title>
        <script type="text/javascript">
          alert(document);
          alert(document.anchors);
    </script>
      </head>
      <body>
        <xsl:value-of select="." /> world
      </body>
    </html>
  </xsl:template>    
</xsl:stylesheet>

最初のアラートは、IE や safari の場合のように "[object]" ではなく、firefox で "[object XMLDocument]" としてポップアップします。私が収集したことから、これは、Firefox が javascript html ドキュメント (または html dom、文言がわからない) を生成しないことを意味します。firefox の 2 番目のアラートは「undefined」ですが、IE と safari では「[object].

そのため、Firefox には document.forms や document.anchors などはありません。document.getElementById のように、いくつかの JavaScript が引き続き機能することはわかっていますが、document.forms などが機能する場合、ajax などのより高度な機能は適切に機能しないのではないかと心配しています。存在しない。

これに対する回避策はありますか? 私の現在のプロジェクトでは、xslt を使用するように一連のページを書き直しています。すでに多くの javascipt が作成されており、制限付きの firefox javascript を使用するようにすべてを変更することは、たとえ可能であったとしても実際にはオプションではありません。

助けてくれてありがとう。

4

2 に答える 2

4

1) 問題を解決する

問題を解決するには、xsl:output要素の@method属性の値を「xml」から「html」に変更するだけです。

2) 違いの説明

HTML DOM はコア XML DOM インターフェイスを拡張します。たとえば、コレクション「forms」は XMLDocument には存在しませんが、HTMLDocument には存在します。

于 2009-06-27T11:00:45.597 に答える
0

xml を使用した理由は、出力に xhtml を使用したかったからです。クライアント側で変換を行っているため、xslt 1.0 に限定されており、xhtml はオプションではありません。いくつかのサイトで、xhtml を出力する方法は xml を選択して omit-xml-declaration を使用することであることがわかりました。これが、Firefox が xml DOM を作成する原因になっていると思います。

Sergey のアドバイスに従って、出力方法を変更したところ、すべてが機能しているようです。これが今の姿です

  <xsl:output method="html"
  encoding="ISO-8859-1"
  indent="yes"
  doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
  doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>

IEでdoctypeをチェックアウトしました。メソッドがhtmlであっても、それはまだxhtmlだと言っています。非常に多くのサイトが xml 出力メソッドのハックを提案している理由がわかりません...

xml DOM と html DOM の違いを説明していただきありがとうございます。好奇心から、xml dom から html dom を手動で作成する方法はありますか?

于 2009-06-29T14:24:16.540 に答える