1

小さな条件ステートメントを作成する必要がありますが、最適なアプローチがわかりません。また、Choose/When ステートメント内に IF テストを配置できるかどうかもわかりません。(私はあなたができないと仮定していますか??)

次の条件を解決しようとしています: 「custom_field」をあるシステムから別のシステムの「Position」にマップします。カスタム フィールドがたまたま空白の場合、システム A から同じ名前のフィールド「Position」で渡される値がデフォルトになります。システムBの「位置」。

「位置」はデフォルトで設定されており、xml で空白にすることはできませんが、カスタム フィールドは空白になる可能性があります。カスタム フィールドが使用されることを優先しますが、空白の場合はデフォルト データが有効になります。

<user>
<Custom_Field>Data</Custom_Field>
<Position>Data</Position>
</user>

これは合法ですか:

<xsl:choose>
   <xsl:if test="custom_field != ''">
      <Position><xsl:value-of select='.'/></Position>
   </xsl:if>
</xsl:choose>

または、Choose ステートメントは When でのみ機能しますか? カスタム フィールドが空白かどうかを評価し、空白の場合に既定のシナリオを設定するにはどうすればよいですか?

申し訳ありませんが、それはシンクまたはスイム環境であり、私はまだ学習中です. すべてのヘルプは非常に高く評価されており、今後の参考のために注意してください。

XMLのデータに基づいて達成しようとしているシナリオ:

シナリオ 1: 入力 XML:

<user>
<Custom_Field>Admin</Custom_Field>
<Position>Teacher</Position>
</user>

出力 XML:

<user>
   <Position>Admin</Position>
</user>

シナリオ 2: 入力 XML:

<user>
<Custom_Field></Custom_Field>
<Position>Teacher</Position>
</user>

出力 XML:

<user>
   <Position>Teacher</Position>
</user>
4

2 に答える 2

3

答えにもう 1 点追加します。XSLT の初心者は、xsl:choose を過度に使用することがよくあります。ここに当てはまるかどうかを確認するのに十分なコードを示していません。しかし、多くの場合、XSLT で条件付き処理を行う正しい方法は、テンプレート ルールをより小さなルールに分割し、一致パターンに述語を配置することです。たとえば、

<xsl:template match="para[@class='x']>...

<xsl:template match="para[@class='y']>...
于 2013-10-22T07:26:57.983 に答える
1

内部ではまたはxsl:chooseのみ使用できます。擬似コードでは、次のように記述できます。xsl:whenxsl:otherwisexsl:choose

if (condition 1)
...
else if (condition 2)
...
else if (condition 3)
...
else
...

どこifelse ifxsl:whenelseですxsl:otherwise.

xsl:ifそれはただ一つの条件です:

if (condition)
...

更新

入力:

<user>
  <Custom_Field>Data1</Custom_Field>
  <Position>Data2</Position>
</user>

XSLT :

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

  <xsl:template match="/user">
    <Position>
      <xsl:choose>
        <xsl:when test="Custom_Field != ''">
          <xsl:value-of select='Custom_Field'/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select='Position'/>
        </xsl:otherwise>
      </xsl:choose>
    </Position>
  </xsl:template>
</xsl:stylesheet>
于 2013-10-22T03:08:39.690 に答える