<a>
<z/>
<b/>
<b/>
<b/>
<c/>
</a>
我想找到在「B」的數「A」當我解析當前節點是「C」使用XSLT。
使用XSLT可以做到這一點嗎?
我不知道元素名稱'b'是什麼,即它的前一個兄弟。我想找到它的父元素中的當前元素的計數使用XSLT
<a>
<z/>
<b/>
<b/>
<b/>
<c/>
</a>
我想找到在「B」的數「A」當我解析當前節點是「C」使用XSLT。
使用XSLT可以做到這一點嗎?
我不知道元素名稱'b'是什麼,即它的前一個兄弟。我想找到它的父元素中的當前元素的計數使用XSLT
如果定位在c
標籤,或任何元素實際上是調用,然後就搞定了,你會做這個前面的兄弟姐妹的個性化......
<xsl:value-of select="count(preceding-sibling::*)" />
編輯:在回答你的發表評論,如果您不想指望所有的兄弟姐妹,但只有緊接一個的計數,並與之前的相同名稱的那些,你可以試試這個...
<xsl:value-of select="count(preceding-sibling::*[name() = name(current()/preceding-sibling::*[1])])" />
這不會盡管在你有多個c
節點的情況下工作明鏡一個父...
<a>
<z/>
<b/>
<b/>
<b/>
<c/>
<z/>
<b/>
<c/>
</a>
在這種情況下,可以通過第一下列元素的唯一ID用不同的名稱來定義這樣一個鍵,組元素:
<xsl:key name="keyc" match="*" use="generate-id(following-sibling::*[name() != name(current())][1])" />
然後你可以得到數,像這樣:
<xsl:value-of select="count(key('keyc', generate-id()))" />
以下是在行動中的三個選項....
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:key name="keyc" match="*" use="generate-id(following-sibling::*[name() != name(current())][1])" />
<xsl:template match="c">
<c>
<example1>
<xsl:value-of select="count(preceding-sibling::*)" />
</example1>
<example2>
<xsl:value-of select="count(preceding-sibling::*[name() = name(current()/preceding-sibling::*[1])])" />
</example2>
<example3>
<xsl:value-of select="count(key('keyc', generate-id()))" />
</example3>
</c>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
它得到的所有計數我只想'b' – divya
在你的問題中,你說你'沒有意識到元素名'b',所以如果你不知道它是什麼,那麼你不能真正地計算一些東西。你真的說你想要得到'c'的前一個兄弟姐妹,並計算它的出現次數嗎? –
我已經修改了我的答案,顯示了許多您可以嘗試的不同選項。 –
使用xsl:number
。它打印出當前元素的數字,按要求格式化。
關於如何進行計算有多種選擇,例如 多層次或字母的。
其實它是一個相當強大的工具。
我想找到在「B」的數「A」當我解析當前節點是「C」
讓我換一種說法:
你要計算的<b>
所有出現與<c>
處於同一水平。要被計數
的元素的local-name
(在這種情況下「B」)::
這XSLT通過調用<xsl:template>
用參數做這項工作
<?xml version="1.0"?>
<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="//c"> <!-- select the desired target element -->
<xsl:call-template name="count">
<xsl:with-param name="elemName" select="'b'" /> <!-- name of the element -->
</xsl:call-template>
</xsl:template>
<xsl:template name="count"> <!-- count all matching elements before and after -->
<xsl:param name="elemName" />
<xsl:value-of select="count(preceding-sibling::*[local-name() = $elemName]) + count(following-sibling::*[local-name() = $elemName])" />
</xsl:template>
</xsl:stylesheet>
在您的例子的情況下輸出簡單地說就是:
你的問題不明確。你的標題說你想要「*其父元素中當前元素的數量*」。如果你在'c'的上下文中,那麼這意味着所有名爲'c'的兄弟姐妹的計數。但是你說你想要數'b' - 但是你不知道'b'的名字。那麼你如何提出識別'b'? –