2012-02-01 8 views

答えて

1

これは、標準のXSLT 1.0または2.0では、単一の変換では不可能です。

Saxon 9 Professional EditionまたはEnterprise Editionを使用して実行できます。これらの製品にはsaxon:parse()拡張機能があります。または、Saxon PE/EEの最新バージョンでもサポートされているXPath 3.0parse-xml()機能を使用してください。


@grtjnが指摘しているように、2パスプロセスで行うことができます。スタイルシート1は、CDATAでラップされたテキストを解析可能なXMLに変換します(<xsl:value-of select="whatever" disable-output-escaping="yes"/>を使用)。スタイルシート2は、スタイルシート1によって生成されたシリアル化された結果を処理します。

+0

[@grtjn](http://stackoverflow.com/a/9108085/413020)によって既に指摘されているように、2回目のパスで可能になるはずです。それじゃない? – Alberto

+0

2つのプロセスステップがどのように結びついているかは違いがあります。私は2つのXSLTステップがSAXイベントを通してJavaで接続されている状況を見ましたが、エスケープ処理がシリアル化されるまで延期されていたので、後続のXSLTはエスケープされていないXMLにアクセスできませんでした。 – grtjn

+0

@grtjn:はい、結果ツリーは 'disable-output-escaping =" yes "'のために直列化されなければなりません。 – mzjn

2

複数の変換ステップを実行する場合は、可能です。関連セクションをdisable-output-escapingで出力し、エスケープされたXMLを有効なXMLに変換します。それを後のステップで処理します。

エスケープされたXMLの整形が必要です。また、一部のパーサでは、エスケープされたXMLが後で変換に入る前にエスケープされたXMLがエスケープされていないことを確認するために、中間結果を(ディスクなどに)シリアル化する必要があります。