2011-01-31 3 views
0

XSLTを使用してXHTMLの一部を抽出してXHTML Webページを変換しようとしています。例えば、HEADとBODYの部分を別々に抽出したいのですが(最初のステップですが、次にdivをいくつか抽出します)、それらを出力XHTMLドキュメントで使用します。ここにXSLTコードがあります:xsltを使用してxhtmlを変換する - ウェブブラウザで表示する際の問題

<xsl:stylesheet version="2.0" 
    xmlns:xhtml="http://www.w3.org/1999/xhtml" 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    exclude-result-prefixes="xhtml xsl xs"> 

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


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

<xsl:template match="xhtml:HTML/xhtml:BODY"> 
<xsl:copy-of select="." disable-output-escaping="yes" /> 
</xsl:template> 


<xsl:template match="xhtml:HTML/xhtml:HEAD"> 
    <xsl:copy-of select="." disable-output-escaping="yes"/> 
</xsl:template> 

</xsl:stylesheet> 

入力XHTMLとして、私はwww.wordpress.org/aboutソースコード(検証中)を持っています。 最初のneko清浄器が解凍され(HTML-> XHTML)、次にxslt変換が行われます。私は、出力コードに見てみたとき、すべてが似ています:

オリジナルコード:codepad.org/5D7MCXSk
コードを変換した後:http://codepad.org/fGzyAwF2

を除き、私は、Webブラウザで開いたときに、私は「白い壁」を取得します - 何も表示されません。私は、変換されたサイトのソースコード(chromeとfirefoxの両方)の構文が閉じるHEADタグまで強調表示されていることに気付きました。それは非常に奇妙で、問題を引き起こしていることです。

ご協力いただきますようお願い申し上げます。事前

+0

達成したいことは明確ではありませんe、スタイルシートのルート要素には、XHTML要素を出力することを示唆する 'xmlns =" http://www.w3.org/1999/xhtml "があります。あなたの 'xsl:output'は、あなたがXHTML文書を出力したいことを示唆しています。しかし、XHTMLは大文字と小文字を区別し、その要素と属性はすべて小文字であると定義されているので、なぜ名前が 'HTML'のリテラルな結果要素があるのか​​理解できません。したがって、結果要素に小文字の要素名と属性名を使用することは、変換によって生成される意味のあるXHTML結果ドキュメントを作成するための第一歩です。 –

+0

(最初のコメントは2番目のコメントが長すぎます)。入力がXHTMLで、パターンのXHTML要素に一致させたい場合は、小文字の名前も必要です。 'match =" xhtml:html/xhtml:head "'それでも問題が解決しない場合は、変換結果をtext/htmlとして、またはapplication/xmlやapplication/xmlなどのXML MIMEタイプで処理するかどうか、そして2番目に作成する結果ドキュメントから2つのことを教えてくださいあなたの入力。 –

+0

変換クライアント側またはサーバー側を実行していますか?あなたのContent-Typeヘッダは何ですか? –

答えて

1

で おかげだから(それはこの1つである?:http://nekohtml.sourceforge.net/http://codepad.org/5D7MCXSk(コード1)http://wordpress.org/about/のソースコード(コード2)と同じであり、あなたが「猫清浄」でこのコードを処理するようだ結果http://codepad.org/fGzyAwF2(コード3)の文書。私が間違っているなら私を訂正してください。

コード3がブラウザに何も表示されない理由は、<HEAD>の末尾に自己閉鎖<SCRIPT/>のようです。 YMMW、しかし、何らかの理由で私のテストでは、ブラウザはそれを気に入らないようでした。

あなたのXSLTコードにはわずかな欠陥がありますが、コード3を入力として入力すると出力が生成されます。入力ファイルのクルーク(その自己閉じスクリプト要素)は、変換で保持されます。

いくつかのランダムノート:

  • あなたは
  • <xsl:copy-of>は属性disable-output-escaping
  • を持っていない、それを "浄化" する必要はありませんので、元の入力(コード1)は、整形XMLですmethod="html"を使用している場合、htmlは名前空間を使用しないため、出力文書のデフォルトの名前空間を定義する意味がありません(xhtmlとは異なります)
+0

最初にneko purifier(あなたと同じリンク)を実行してから、XSLT変換を実行します。私はWordPressが有効なXHTMLサイトであることを知っていますが、全体の仕組みは異なるサイトでも機能します。これは単なる出発点です。ありがとう –

+0

あなたは正しいです - 問題は、HEADセクションの最後に自己閉鎖

関連する問題