2012-11-19 118 views
1

的,我有以下XML:XSLT - Occurence屬性

<Books> 
<Book author="John" country="Norway"/> 
<Book author="Paul" />  
<Book author="Steve" country="England"/>  
</Books> 
<Books>  
<Book author="George" />  
<Book author="Thomas" country="Germany"/> 
</Books> 

我想找到屬性「國家」的每個「書」元素內的位置。

<Books> 
<Book author="John" country="Norway"/> --1 
<Book author="Paul" />  
<Book author="Steve" country="England"/> --2 
<Book author="Bob" country="Denmark"/> --3 
</Books> 
<Books>  
<Book author="George" />  
<Book author="Thomas" country="Germany"/> --1 
</Books> 

我們可以使用哪種XPath函數?

回答

3

你可以指望與屬性前面的兄弟姐妹的數量,這裏是顯示一個模板:

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

<xsl:template match="Books/Book[@country]"> 
    <xsl:value-of select="count(preceding-sibling::Book[@country]) + 1"/> 
</xsl:template> 

</xsl:stylesheet> 
+0

非常感謝,像魅力一樣工作。 –

0

您可以使用XPath計數功能:

count(/Books/Book/@country) 
+0

「計數」 返回 「國」 出現的總次數。我想知道這個屬性的位置。 –

+0

@saravana_pc - count是一個彙總函數。不能使用匯總功能檢索位置。 – randominstanceOfLivingThing

+0

@Suresh - 我同意不能使用「count」。因此想知道如何解決這個問題。 –

1
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="Books"> 
    <xsl:apply-templates select=".//@country"/> 
</xsl:template> 

<xsl:template match="@country"> 
    <xsl:value-of select="position()"/> 
    <xsl:text>&#xA;</xsl:text> 
</xsl:template> 
</xsl:stylesheet> 

當此轉換應用於提供的XML文檔(製作完好):

<t> 
<Books> 
<Book author="John" country="Norway"/> --1 
<Book author="Paul" /> 
<Book author="Steve" country="England"/> --2 
<Book author="Bob" country="Denmark"/> --3 
</Books> 
<Books> 
<Book author="George" /> 
<Book author="Thomas" country="Germany"/> --1 
</Books> 
</t> 

想要的,正確的結果產生

1 
2 
3 
1