141

XSLT を介してファイルの doctype を HTML5にきれいに設定するにはどうすればよいでしょうか(この場合はcollective.xdvを使用) 。<!DOCTYPE html>

以下は、私のGoogle fooが見つけた最高のものです:

<xsl:output
    method="html"
    doctype-public="XSLT-compat"
    omit-xml-declaration="yes"
    encoding="UTF-8"
    indent="yes" />

生成:

<!DOCTYPE html PUBLIC "XSLT-compat" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4

12 に答える 12

154

これは現在、doctype をテキストとして書き出すことによってのみサポートされていると思います。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" encoding="utf-8" indent="yes" />

  <xsl:template match="/">
    <xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html&gt;</xsl:text>
    <html>
    </html>
  </xsl:template>

</xsl:stylesheet>

これにより、次の出力が生成されます。

<!DOCTYPE html>
<html>
</html>
于 2010-08-02T12:05:29.353 に答える
66

シンプルな HTML doctypeを使用するには、次の機能<!DOCTYPE html>を使用する必要があります。ただし、 XSLTのオプション機能であるため、XSLT エンジンまたはシリアライゼーション パイプラインでサポートされていない可能性があります。disable-output-escaping<xsl:text disable-output-escaping="yes">&lt;!DOCTYPE html&gt;</xsl:text>disable-output-escaping

このため、HTML5 は、HTML5 を認識しない XSLT バージョン (つまり、XSLT の現在存在するすべてのバージョン) および同じ問題を持つ他のシステムとの互換性のために、代替の doctype を提供します。代替のDoctypeは<!DOCTYPE html SYSTEM "about:legacy-compat">. この doctype を出力するには、属性をまったく使用せずdoctype-system="about:legacy-compat"xsl:output要素の属性を使用します。doctype-public

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="html" doctype-system="about:legacy-compat"/>
   ...
   <html>
   </html>
</xsl:stylesheet>
于 2010-08-04T11:09:04.497 に答える
30
<xsl:output
     method="html"
     doctype-system="about:legacy-compat"
     encoding="UTF-8"
     indent="yes" />

これは出力します

<!DOCTYPE html SYSTEM "about:legacy-compat">

これはhttp://ukchill.com/technology/generating-html5-using-xslt/への私の修正として変更されています

于 2012-05-06T07:24:10.557 に答える
10

HTML5 と一貫性のある XHTML 出力が必要な場合は、XHTML 1.0 Strict を doctype として使用する必要があります。libxml2 の xml シリアライザーには、XHTML 1.0 doctypes によってトリガーされる特別な出力モードがあり、出力が XHTML 互換であることを保証します (例:<br />ではなく<br/>では<div></div>なく<div/>)。この互換モードをトリガーdoctype-system="about:legacy-compat"しませ

html 出力に満足している場合、設定<xsl:output method="html">は正しいことを行うはずです。その後、doctype を<xsl:text disable-output-escaping="yes">&lt;!DOCTYPE html&gt;</xsl:text>で設定できますが、XDV はまだこれをサポートしていないため、適切な場所に接続する必要があります。

<xsl:output method="html"/>実際、どちらも実際には役に立たないようです- これは<br/>として出力され<br></br>ます。

于 2010-08-04T14:09:12.297 に答える
10

doctype-public の代わりに doctype-system を使用する

于 2010-08-02T12:01:55.693 に答える
6

Plone.org の高度な XDV テーマを介した Jirka Kosekのアドバイスのこのバリエーションは、collective.xdvで機能するようです。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output
      doctype-public="HTML"
      doctype-system=""/>
</xsl:stylesheet>
于 2010-08-02T13:42:08.337 に答える
5

これはコメントですが、正しい場所に配置するのに十分なカルマ ポイントがありません。はぁ。

これはおそらく、私が望むことを達成するための正しい標準主導の方法であることに感謝します(私はそのように賛成しました)。しかし、前者はサポートされておらず (私のプロセッサーが落ちます)、後者は私の doctypeで " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " になります。@Jirka Kosek が示唆したように、XSLT プロセッサが壊れている可能性があると思います。

いいえ、あなたの XSLT プロセッサは壊れていません。XDV が追加するだけです:

<xsl:output method="xml" indent="no" omit-xml-declaration="yes" media-type="text/html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>

デフォルトでは、秒を追加しても<xsl:output doctype-system="about:legacy-compat"/>、前の秒doctype-publicは上書きされません。

XHTML 1.0 strict は廃止された許可された doctype stringとしてリストされているため、この doctype を使用して HTML5 と呼ぶことはまったく問題ありません。

于 2010-08-04T14:18:20.610 に答える
3

リンクのみを提供して申し訳ありませんが、これは WHATWG グループの間で議論されましたが、私が対処してから何ヶ月も経ちました. ここで Ian Hickson と何人かの XML 専門家がこれについて議論しています:
http://lists.w3.org/Archives/Public/public-html/2009Jan/0640.html
http://markmail.org/message/64aykbbsfzlbidzl
とここに実際の問題があります番号:
http://www.w3.org/html/wg/tracker/issues/54
およびここにこの議論があり
ます http://www.contentwithstyle.co.uk/content/xslt-and-html-5-problems

于 2010-08-02T12:15:44.027 に答える
1

として保存すると、次のコードはスタンドアロン テンプレートとして機能し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>

参考文献

于 2012-01-05T23:09:20.793 に答える