3

私は本当にこの質問に対する答えが必要です。XMLを使用してページを作成し、次にXSLTを使用してそれをWebページに作成するプロジェクトに取り組んでいます。コードサンプルは次のとおりです。

 public function transform ($xml) {
  $proc = new XSLTProcessor;
  $proc->importStyleSheet ($this->xsl);
  $output = $proc->transformToXML ($xml);
  return $output;
 }

$ xmlには、XML形式のWebページが含まれています。次に例を示します。

<?xml version="1.0" encoding="utf-8"?>
<page>
 <meta>
  <language>en</language>
  <title>Main page</title>

 <content>
<![CDATA[
  lot's of content here along with <p>html</p>.
]]>
 </content>

</page>

したがって、WebページはXMLであり、変換関数に渡されます。この関数は、XSLファイルをロードしてXMLをHTMLWebページに変換します。ただし、XSLTは何らかの理由でCDATAを理解せず、HTMLをエンティティにエンコードするため、上記のスクリプトはコンテンツタグを正しくロードできません。

したがって、問題は、XSLTを使用して、エンティティにエンコードせずにHTMLをHTMLとして出力するにはどうすればよいかということです。

4

2 に答える 2

4

XSLT に次のようなものはないと思います。

<xsl:template match="content">
  <xsl:value-of select="." disable-output-escaping="yes" />
</xsl:template>

XSLT は CDATA を完全に「理解」します。より正確には、CDATA にはまったく関係ありません。これは、そこからテキスト値を作成する、基礎となる XML DOM パーサーのタスクです。

XSLT の観点からは、文字列が

"<div>bla &amp; bla</div>"

出てきた

<xml>&lt;div&gt;bla &amp;amp; bla&lt;/div&gt;</div>

また

<xml><![CDATA[<div>bla &amp; bla</div>]]></div>

CDATA は単なるシリアル化の利便性です。結果の情報セット/DOM は同じです。また、出力エスケープを無効にしない限り、XSLT は上記の文字列から次の値を正しく生成します。

&lt;div&gt;bla &amp;amp; bla&lt;/div&gt;

これが、レンダリングされたページに HTML コードが表示される理由です。

于 2009-11-11T09:52:16.383 に答える
-1

これが役立つかどうかを確認してください。答えにはもっと詳しく説明しますが、XSLTとSaxonで使用される標準のXMLReaderのラッパーであるLexEv XMLReaderを使用して、XSLTからこのような変換結果を実現する方法を説明するリンクの方が適していると思います。

于 2009-11-11T08:40:43.560 に答える