2012-03-08 14 views
1

に飲み込ま取得します。私は、XHMLエンティティの参照がすべてプロセスで呑み込まれているという問題、例えば&コピーなどの問題を抱えています。出力で消えています。任意のエンティティ参照が消え出力でXHML実体参照は、私はXMLにXHTMLファイルを変換していXSLT

<?xml version="1.0" encoding="utf-8"?> 

<xsl:output method="xml" indent="yes"/> 

    <xsl:template match="h1|h2|h3|h4|h5|h6|h7|h8|h9"> 
    <heading> 
     <xsl:attribute name="name"> 
     <xsl:value-of select="name(.)" /> 
     </xsl:attribute> 
     <xsl:attribute name="content"> 
     <xsl:value-of select="." /> 
     </xsl:attribute> 

    </heading> 
    </xsl:template> 

    <xsl:template match="/html/body"> 
     <mapping> 
     <xsl:apply-templates select="h1|h2|h3|h4|h5|h6|h7|h8|h9" />   
     </mapping> 
    </xsl:template> 
</xsl:stylesheet> 

を次のように

私のコードが見えます。エンティティ定義を自分のXSLに追加しようとしました...運がいいわけではありません。

提案がありますか?

アントン

+1

あなたの入力と希望する出力のサンプルを提供してください。 – GeoGriffin

+1

また、どのプロセッサを使用するのか、エンティティ定義をどのように追加したのかを詳しく説明できますか? – BiAiB

+0

私はしばらく前に尋ねた同様の質問があります。 http://stackoverflow.com/questions/5985615/preserving-entity-references-when-transforming-xml-with-xslt –

答えて

2

実体参照にはDTDが必要です。ソースドキュメントにDTDが含まれ、エンティティの解決を無効にしないようにしてください。あなたが起こるしたい何

は、入力中&copy;が出力文書に©なることです。出力文書にエンティティ参照が必要なわけではありません。 XSLTを開始する前に

+0

実体参照は実際にはDTDを必要とせず、単に宣言する必要があります。 –

+0

乾杯、それはトリックを行います。残念ながら、xsltプロセッサ(altovaxml)がDTDへの外部リンクを解決できないという点で、ソースxhtmlファイルにDOCTYPE定義を追加する際にはまだ問題があります。私はDTDとentitityファイルをローカルでダウンロードし、ローカルコピーを参照することができました。 – anthun

+0

それが目的です。 w3cは、XMLプロセッサからの要求に対して、これらのDTDリンクが確実に機能しないようにします。ほとんどのXMLプロセッサには、システムIDを変更せずにDTDのローカルコピーを自動的に参照するXMLカタログという機能があります。 –

1

エンティティは、すべてのXMLパーサ(概念的)によって展開され、XSLTは、実体参照を使用したことを認識していないので、それらを保存することはできません。あなたが文字として表示されるように非ASCII文字を使用しない場合は、最も簡単な解決策は、このような著作権のように、その後、任意の非ASCII文字は10進数または16進数の数値参照としてエンコードされます

<xsl:output encoding="US-ASCII"/> 

としてエンコーディングを指定することです©ではなく、&#169;として出力されます(出力が実際にXSLTによってシリアル化されていることを前提とします)。

関連する問題