1

google code prettifier (SOではここでも使用されています)はaのコンテンツを解析し、cssを介して強調表示できるように.prettyprintいくつかのsを挿入します。<span>

XSLTでXMLファイルを提供している場合を除いて、これは完全に単純に機能します。その場合、prettifierはOperaでのみ正しく実行されますが、FirefoxまたはChrome(正確にはChromium)での動作を拒否します。最小限の例を作成しました。以下を参照してください。

XHTMLファイル(サーバー上で生成されたxsltproc)を直接開くと、Firefoxは突然prettyprintを正しく実行できます。ただし、XML自体を変換すると、prettifyは機能しなくなります。どうすればこれを回避できますか?私はおそらく何か間違ったことをしていますか?

これはXMLファイルです

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="test.xslt" type="text/xsl" ?>
<root><![CDATA[
int main() {
  float x {7.7};
  return 0;
}
]]></root>

そしてこれはスタイルシートです:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
  <xsl:output method="xml" version="1.0" indent="yes"
    doctype-public="-//W3C//DTD XHTML 1.1//EN"
    doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
  />
  <xsl:template match="/">
    <html><head>
      <link rel="stylesheet" type="text/css" href="_include/gcp/prettify.css" />
      <script type="text/javascript" src="_include/gcp/prettify.js"> </script>
    </head>
    <body onload="prettyPrint()">
    <pre class="prettyprint"><xsl:value-of select="." /></pre>
    </body></html>
  </xsl:template>

</xsl:stylesheet>

参考までに、これは次の方法で生成されるXHTML1.1ですxsltproc

<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link rel="stylesheet" type="text/css" href="_include/gcp/prettify.css"/>
    <script type="text/javascript" src="_include/gcp/prettify.js"/>
  </head>
  <body onload="prettyPrint()">
    <pre class="prettyprint">
int main() {
  float x {7.7};
  return 0;
}
</pre>
  </body>
</html>

編集:

これはFirefoxによってレンダリングされたマークアップです(Ctrl+ Shift+を使用して抽出I

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link rel="stylesheet" type="text/css" href="gcp/prettify.css"/>
    <script type="text/javascript" src="gcp/prettify.js"/>
  </head>
  <body onload="prettyPrint()">
    <pre class="prettyprint">
      <SPAN xmlns=""> </SPAN>
      <SPAN xmlns="">int</SPAN>
      <SPAN xmlns=""> main</SPAN>
      <SPAN xmlns="">()</SPAN>
      <SPAN xmlns=""> </SPAN>
      <SPAN xmlns="">{</SPAN>
      <SPAN xmlns="">
  </SPAN>
      <SPAN xmlns="">float</SPAN>
      <SPAN xmlns=""> x </SPAN>
      <SPAN xmlns="">{</SPAN>
      <SPAN xmlns="">7.7</SPAN>
      <SPAN xmlns="">};</SPAN>
      <SPAN xmlns="">
  </SPAN>
      <SPAN xmlns="">return</SPAN>
      <SPAN xmlns=""> </SPAN>
      <SPAN xmlns="">0</SPAN>
      <SPAN xmlns="">;</SPAN>
      <SPAN xmlns="">
</SPAN>
      <SPAN xmlns="">}</SPAN>
    </pre>
  </body>
</html>
4

2 に答える 2

0

多分あなたは追加してみることができます

<script>prettyPrint()</script>

体の後。Firefoxはコードを1行ずつ実行するので、最初prettyPrint()にXSLTコンテンツを実行して挿入しようとするので、prettyPrint()実行するものは何もないと思います...

于 2012-08-10T13:00:00.610 に答える
0

xsl の出力方法を xml から html に更新します。

<xsl:output method="html" version="1.0" indent="yes"
doctype-public="-//W3C//DTD XHTML 1.1//EN"
doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"/>
于 2013-01-25T09:20:31.170 に答える