6

XSLT で合体を実行するための組み込み関数を知っている人はいますか?それとも自分で作成する必要がありますか?

次のようなxmlがあります。

<root>
 <Element1>
   <Territory>Worldwide</Territory>
   <Name>WorldwideName</Name>
   <Age>78</Age>
 </Element1>
 <Element1>
   <Territory>GB</Territory>
   <Name>GBName</Name>
 </Element1>
</root>

2 番目の要素 1 (GB Territory) は完全にオプションであり、発生する場合と発生しない場合がありますが、発生した場合は WorldWide Territory よりも優先されます。

だから私がしたのは、以下の合体のようなものです:

<xsl:variable name="Worldwide" select="root/Element1[./TerritoryCode ='Worldwide']"/>
<xsl:variable name="GB" select="root/Element1[./TerritoryCode ='GB']"/>

<xsl:variable name="Name" select="ext:coalesce($GB/Name, $Worldwide/Name)"/>

上記の例の変数 Name である ID には、GBName が含まれます。

xsl:choose を使用できることはわかっていますが、4 つの場所があり、xsl:choose が面倒で複雑になる場所がいくつかあるので、組み込み関数を見つけたいと思っていましたが、これまでのところ運がありませんでした。 .

ありがとうございました。

4

1 に答える 1

8

XSLT 2.0 では、変数から一連の項目を作成し、述語フィルターを使用して最初の項目を選択することができました。

<xsl:variable name="Name" select="($GB/Name, $Worldwide/Name)[1]"/>

述語フィルターは、シーケンス内の最初の非 null 項目を選択します。

たとえば、これでも「GBName」が生成されます。

<xsl:variable name="emptyVar" select="foo"/>
<xsl:variable name="Worldwide" select="root/Element1[Territory ='Worldwide']"/>
<xsl:variable name="GB" select="root/Element1[Territory ='GB']"/>

<xsl:variable name="Name" select="($emptyVar, $GB/Name, $Worldwide/Name)[1]"/>
于 2013-09-06T02:15:59.943 に答える