0

私が作成していないアプリケーション内で作業しています。

アプリケーションはTrue/FalseXSLT ファイルから を必要とします。XSLT が何かを返す場合は True、何も返さない場合は false です。これは、アプリケーションが XML を Web サービスに公開するかどうかを決定するために使用されます。

だから私は最初に始めました

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
  <xsl:choose>
   <xsl:when test="{{if this is true I don't want anything returned}}">

   </xsl:when>
  </xsl:choose>
 </xsl:template>
</xsl:stylesheet>

{これでうまくいくと思ったが、まだ戻ってきていたのは間違いだった。そこにないときに試してみると、アプリケーションは不要な XML を公開します。}

それで私は試しました

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
  <xsl:choose>
   <xsl:when test="{{if this is true I don't want anything returned}}">
    <xsl:message terminate="yes" />
   </xsl:when>
  </xsl:choose>
 </xsl:template>
</xsl:stylesheet>

そして、アプリケーションにエラーを送信して変換を終了し、エラーがアプリケーションによってキャッチされ、次の XML がパブリッシング プロセスを通過しないようにしました。

私が必要としているのは、XSLT ファイルがコマンドで結果を返さないようにすることです。

XSLT がどのように機能するかを完全には理解していないのかもしれません。何か間違ったことをしているのかもしれません。

4

2 に答える 2

2
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" />    

 <xsl:template match="/">
  <xsl:choose>
   <xsl:when test="{{if this is true I don't want anything returned}}" />
   <xsl:otherwise>
    <xsl:text>Return something</xsl:text>
   </xsl:otherwise>
  </xsl:choose>
 </xsl:template>
</xsl:stylesheet>

テストが true と評価された場合、これはまったく何も返さないはずです。

もう 1 つのバリエーションは、一致式の特異性を使用することです。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" />    

 <!-- empty template with a more specific match expression -->
 <xsl:template match="/*[{if this is true I don't want anything returned}]" />

 <xsl:template match="/">
  <xsl:text>Return something</xsl:text>
 </xsl:template>
</xsl:stylesheet>

ただし、このアプローチでは、一致式で入力ドキュメントからノードをテストすることに限定されます。変数は一致式では機能しません。

于 2013-07-02T19:45:07.620 に答える
2

XSLT スタイルシートの出力は、常に XPath データ モデルに準拠した XML ドキュメントです。これは必ずしも整形式の XML であるとは限りません。たとえば、子を持たないドキュメント ノード (空のドキュメント) にすることができます。これはおそらく、「何も出力しない」ことに最も近いものです。この「何もない」ことをテストする方法は、呼び出し元のアプリケーションによって異なります。実際には、アプリケーションがテストしやすい「何か」を出力することをお勧めします。たとえば、単一の空の要素を含むドキュメント<nothing/>です。

于 2013-07-02T21:50:14.980 に答える