2011-05-31 113 views
1

我遇到一些麻煩XSLT和希望,也許這裏有人能幫助我:XSLT 1.0:從串聯子節點屬性

我的XML文件看起來像這樣:

<garden> 
    <appletree> 
    <fruit name="a" /> 
    <fruit name="b"/> 
    <fruit name="c"/> 
    <fruit name="d"/> 
    </appletree> 

    <appletree> 
    <fruit name="e" /> 
    <fruit name="f"/> 
    <fruit name="p"/> 
    <fruit name="h"/> 
    </appletree> 

<appletree> 
    <fruit name="e" /> 
    <fruit name="f"/> 
    <fruit name="q"/> 
    <fruit name="r"/> 
    </appletree> 
</garden> 

現在我想將鍵分配給appletree節點,由它們的水果子項的連接名稱屬性組成。所以第一棵樹的關鍵是'abcd',第二棵樹'efph'和第三棵樹'efqr'。

我試過如下:

<xsl:key name="key" match="appletree" use="fruit/@name" /> 

「果/ @名」返回一組全名attributs的,但只有第一個被用作關鍵。其他人被忽略。所以基本上我需要的就是這樣一個函數:concat(fruit [1]/@ name,...,fruit [n]/@ name)。

XSLT 1.0中有這樣的函數嗎? (我不能使用XSLT 2.0,我認爲這將使這容易得多。)

我會很感激的幫助不大,因爲我真的在這裏輸了...

回答

2

這一點一個黑客,但沒有理由你不能只使用concat,'n'是你找到的最多的。

concat(fruit/@name,fruit[2]/@name,fruit[3]/@name,fruit[4]/@name,fruit[5]/@name)

如果只有4,最後一個將剛剛被忽略,它會使用長度爲4的值。注意:你不需要第一個[1],它會默認給你。

任何其他解決方案可能會明顯更復雜。我可以想到使用雙通道方法的一種方法,但它會使代碼更加可讀和可維護。

+0

我嘗試了幾乎所有的東西,除了你建議的解決方案......這對我來說很好,尤其是因爲我事先或多或少知道要處理多少'水果'。非常感謝! – 2011-05-31 20:38:14