2012-04-03 31 views
0

我怎麼能通過Xpath得到不同的子節點的名稱,名稱比一次mor?Xpath得到不同的子節點的名稱,名稱計數是mor然後一個

如果這些十歲上下的XML:

> <el> 
>  <name1></name1> 
>  <name1></name1> 
>  <name1></name1> 
>  <name2></name2> 
>  <name1></name1> 
>  <name2></name2> 
>  <name2></name2> 
>  <name3></name3> </el> 

結果:

名1 名2

不是NAME3

+3

請修復你的問題。考慮一個正確的標題,並至少編寫一段描述你想要做什麼的完整段落。 – Tomalak 2012-04-03 14:38:17

+0

我編輯了我的問題 – 2012-04-03 15:15:11

回答

4

通過沿兄弟軸檢查進行分組時顯示二次(緩慢)行爲,當在xslt 1中分組時,使用密鑰幾乎總是一個好主意(稱爲Muenchian分組)

<xsl:stylesheet version="1.0" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 


<xsl:template match="el"> 
<xsl:for-each select="*[generate-id()=generate-id(key('n',name())[2])]"> 
    <xsl:value-of select="name()"/> 
    <xsl:text> </xsl:text> 
</xsl:for-each> 
</xsl:template> 

<xsl:key name="n" match="*" use="name()"/> 

</xsl:stylesheet> 
+0

你說得對,這顯然勝過我的解決方案在更大的節點集 – 2012-04-04 07:15:37

0
./*[preceding-sibling::node()/name(.) != name(.)] 
    [following-sibling::node()/name(.) = name(.)]/name(.) 

此發現這並不都子節點有一個同名的兄弟姐妹(不同的名字),但是哈哈有一個同名的兄弟姐妹(多於一個)

+0

這些拋出xpath異常無效tokin – 2012-04-03 15:21:31

+0

@ Oldi88語法是有效的xpath2而不是xpath1(但在xslt2中使用xsl:for-each-group會更有效) – 2012-04-03 19:30:35

+0

@DavidCarlisle:你是對的。我不知道這也是一個XSLT問題... – 2012-04-04 07:16:10

相關問題