2013-09-05 3 views
5

誰かがXSLTで合体を実行するための組み込み関数を知っていますか、それとも私自身で作成する必要がありますか?xsltはSaxonと機能を融合します

私はこのようないくつかのXMLを持っている:

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

第二の要素1(GB地域)がcompletly任意であり、又はmaynot起こり得るが、しかし、それが発生した場合には、世界中の地域に優先します。

それでは、私が後だったことは、以下の合体のようなものです:

<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)"/> 

idは、上記の例では、変数名がGBNameが含まれていることであること。

私はxsl:chooseを使うことができると知っていますが、見た目は4つの場所があり、xsl:ちょうど乱雑で複雑なものになるので、組み込み関数を探していましたが、これまで運がなかった。

ありがとうございます。

あなたは自分の変数から項目のシーケンスを作成し、述語フィルタで最初のものを選択することができXSLT 2.0で
+0

のXPath 2つの支持[条件式](http://www.w3.org/TR/xpath20/#id-conditionals)がよいですこれを達成するのに役立ちます。 –

答えて

5

<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]"/> 
関連する問題