0

私はいくつかの XSLT 変換に取り組んでいます。これらの変換は、自動化された方法で毎日何千もの XML ドキュメントに適用する必要があります。結果のファイルは、ターゲット ディレクトリに出力する必要があります。

XML を生成する変換もあれば、プレーン テキストを生成する変換もあることに注意してください。

入力 XML に特定の値が含まれている場合、特定の XSLT 変換では出力がまったく生成されず、ファイルが書き込まれないという新しい要件があります。

XSLT からの出力を .net で処理しているため、テキストを生成する XSLT については、結果の出力が空白か空白のみかを確認するだけです。その場合、ファイルを書き込まず、すべてが完璧です。

XML を生成する XSLT からの空白の出力を認識しようとすると問題が発生します。これは、ブロックに何も出力しないように指定した場合でも、ドキュメントが空白であってもxsl:template出力に XML Doctype が含まれるためです。<?xml version="1.0" encoding="UTF-8"?>

この問題の解決策の 1 つは、XML doctype のみを含むドキュメントを .net コードで除外することですが、それを行う最善の方法が何であるかはわかりません。これまでのところ、私は と を試しxml.Trim().StartsWith("<?xml") && xml.Trim().EndsWith("?>")ましたが、それがどれほど防弾かはわかりません。

出力するデータがある場合にのみ、何らかの方法で XSLT 出力を doctype にすることができれば、おそらくより良いでしょう。<xsl:output>ノードをノード内に配置しようとしまし<xsl:if>たが、うまくいきません。

必要な結果を得るための良い方法は何ですか?

4

4 に答える 4

1

XSLT 2.0を使用している場合は、 xsl:result-documentを使用して結果ドキュメントを作成でき、それを作成するかどうかを動的に決定できます。(プライマリ出力も常に存在しますが、それを /dev/null に送信できます)。

于 2013-09-26T21:14:21.780 に答える
1

入力 XMLに特定の値が含まれている場合、特定の XSLT 変換では出力がまったく生成されず、ファイルが書き込まれないという新しい要件があります。

私がすることは、条件付きで変換自体を実行することです。変換を実行する前に、XML ファイルを確認してください。ファイルを作成しないように入力が指示されている場合は、変換を実行しないでください。

于 2013-09-26T19:49:03.217 に答える
0

<?xml version="1.0" encoding="UTF-8"?>「DOCTYPE」ではありません。これは XML 宣言です: http://www.w3.org/TR/xml/#sec-prolog-dtd

XML 宣言を省略したい場合は、

<xsl:output omit-xml-declaration = "yes"/> 

あなたのスタイルシートで。XSLT 1.0 と 2.0 の両方で動作します。参考文献:

<xsl:output>はスタイルシート モジュールの最上位要素であることに注意してください。<xsl:if>既にお気づきのように、 に入れることはできません。XSLT 1.0 の条件 <xsl:output> を参照してください。関連する議論のために。

XML ドキュメントで XML 宣言を行うことは良い習慣ですが、必須ではありません。したがって、純粋な XSLT オプションは、常に XML 宣言を省略することです。

于 2013-09-26T19:26:35.683 に答える
0

おそらくmzjnさんの回答がベストだと思います(宣言は必ず省略)。ただし、宣言が必要な場合omit-xml-declaration="yes"は、<xsl:output>タグで使用できますが、条件付きで先頭に<xsl:text>.

于 2013-09-27T04:26:46.270 に答える