2017-09-12 9 views
0

XSLTを使用してXMLをXMLに変換する際、出力XMLにdoctypeを含めました。しかし、出力XMLのdoctype宣言に改行が作成されます。XSLTを使用してXMLのdoctypeのスペースを削除します

XSLT:XSLTを使用した後

<xsl:output method="xml" doctype-system="book3.dtd" doctype-public="-//Atypon//DTD test//EN" version="1.0" encoding="UTF-8" indent="no"/> 

出力XML:

<!DOCTYPE book 
    PUBLIC "-//Atypon//DTD test//EN" "book3.dtd"> 

スペースや改行はDOCTYPE宣言に本と公共の間で作成されます。

私はdoctype宣言が1行で必要です。

誰でもこの操作を手伝ってもらえますか?

+0

なぜ、doctype宣言が1行で必要なのですか? –

+0

はいマーティン。その宣言が1行で必要です – Anitha

+0

これはXSLTプロセッサに依存するようです。 'Saxon'はこれを2行に出力し、' xsltproc'を1行に出力します。どのXSLTプロセッサを使用していますか? – zx485

答えて

1

「必要」とは1行にする必要があると言いますと、無視されると思われるもの(無視できる空白など)に重要性を付けるパーサーを使用して結果のXMLを処理する必要があります。

問題の正しい解決方法は、XMLに準拠したXMLパーサーだけを処理することです。非適合パーサーが課す制限に合わせてシリアル化された形式を調整してみる必要はありません。

しかし、Saxonシリアライザは、本当に必要な場合にカスタマイズできるように設計されています。 Configuration.setSerializerFactory()を呼び出してnewXMLEmitter()メソッドをオーバーライドしてサブクラスXMLEmitterを作成し、サブクラスXMLEmitterwriteDocType()メソッドをオーバーライドして、必要な方法でDOCTYPE宣言を書式設定するサブクラスをSerializerFactoryに登録します。

関連する問題