我輸入XML文件是follws:在muenchian分組中,爲什麼我可以直接使用密鑰時使用generate-id?
<root>
<Property>
<Name>Jack</Name>
<Color>red.green</Color>
</Property>
<Property>
<Name>Jill</Name>
<Color>red.blue</Color>
</Property>
<Property>
<Name>Jim</Name>
<Color>red.orange</Color>
</Property>
<Property>
<Name>Tom</Name>
<Color>black.brown</Color>
</Property>
.
.
.
<Property>
<Name>Tom</Name>
<Color>white</Color>
</Property>
</root>
在XSLT 1.0我想選擇所有的屬性元素,其元素值之前。是相同的並且在之前做出相同的值。作爲一個記錄。
實例(使用樣本子輸入文件) 1)input.xml中
<root>
<Property>
<Name>Jack</Name>
<Color>red.green</Color>
</Property>
<Property>
<Name>Jill</Name>
<Color>red.blue</Color>
</Property>
<Property>
<Name>Jim</Name>
<Color>red.orange</Color>
</Property>
</root>
樣本子的Output.xml
<red>
<green>Jack<green>
<blue>Jill<blue>
<orange>Jim<orange>
<red>
2)input.xml中
<root>
<Property>
<Name>Jack</Name>
<Color>red.green</Color>
</Property>
<Property>
<Name>Jill</Name>
<Color>green.orange</Color>
</Property>
<Property>
<Name>Jim</Name>
<Color>orange.red</Color>
</Property>
<Property>
<Name>Ted</Name>
<Color>brown</Color>
</Property>
</root>
樣品sub output.xml
<red>
<green>Jack</green>
</red>
<green>
<orange>Jill<orange>
</green>
<orange>
<red>Jim</red>
</orange>
<brown>Ted</brown>
我也問過類似的問題在計算器本身,但我得到了與報表弄得似
<xsl:apply-templates select="/root/Property[generate-id(.) = generate-id(key('test',Property)[1])]"/>
,其中關鍵是:
<xsl:key name='test' match='Property' use='.'/>
[還有一個問題在這裏:爲關鍵匹配值應該作爲Property或root/Property給出。我在想這個鍵根據上下文選擇Property元素。 (這裏的上下文是/根/屬性,因爲它是在聲明中<xsl:apply-templates select="/root/Property)
這裏給出的XPath表達式,真正的請清楚這一點]
我的實際問題是
,而不是使用這樣的:
<xsl:apply-templates select="/root/Property[generate-id(.) = generate-id(key('test',Property)[1])]"/>
我可以用這個:
<xsl:apply-templates select="key('test',//root/Property)"/>
,其中關鍵是
<xsl:key name='test' match='Property' use='.'/>
什麼是實際差異(在執行和流量方面)?
這個問題中的最後一行代碼在語法上是無效的,因此,只需調用'key()'函數就可以執行分組的語句是錯誤的(沒有根據)。請編輯問題並提供一個完整的工作示例,其他人可以複製和粘貼,然後運行和複製(提示:由於您的陳述錯誤,您將無法提供此類示例)。至於所有其他問題,對於單個SO問題來說太多了,而且答案需要是完整的講座。請分成不同的問題。最好的建議:讀一本好書。 – 2012-07-12 04:38:31
@DimitreNovatchev,我編輯了這個問題。 – user1497365 2012-07-12 19:44:13
@DimitreNovatchev任何好的書或網站,你可以建議將是有益的。我是XSLT的新手,在過去的幾天裏我正在使用XSLT。因此,理解選擇中的key()是如何工作的,以及在select XPATH表達式中key()如何在generate-id函數中工作會很好嗎? – user1497365 2012-07-12 20:01:55