我有一個包含以下類型的XML架構:如何使用XSLT查找<xs:list>中的元素數量?
<xs:simpleType name="valuelist">
<xs:list itemType="xs:double"/>
</xs:simpleType>
示例XML片段是:
<values>1 2 3.2 5.6</values>
在XSLT轉換,我如何才能在列表中元素的個數?
如何迭代元素?
我有一個包含以下類型的XML架構:如何使用XSLT查找<xs:list>中的元素數量?
<xs:simpleType name="valuelist">
<xs:list itemType="xs:double"/>
</xs:simpleType>
示例XML片段是:
<values>1 2 3.2 5.6</values>
在XSLT轉換,我如何才能在列表中元素的個數?
如何迭代元素?
一的XPath 2.0(XSLT 2.0)解決方案:
count(tokenize(., ' '))
二,的XPath 1.0(XSLT 1.0)溶液:
string-length()
-
string-length(translate(normalize-space(), ' ', ''))
+ 1
至於迭代移到該列表的項目:
select
屬性:-
for $i in tokenize(., ' '),
$n in number($i)
return
yourXPathExpression
-
2.
在XSLT 1.0中,您需要更多的代碼來分割/標記。這個問題有幾個很好的答案(其中一部分是我的) - 只需要搜索「xslt split a string」
如果列表是嚴格間隔的,則可以根據字符串長度計算空格。
<values>1 2 3.2 5.6</values>
XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/">
<xsl:value-of select="string-length(values)
- string-length(translate(values, ' ', '')) + 1"/>
</xsl:template>
</xsl:stylesheet>
遍歷你必須拆分此字符串的元素。 SO有很多例子。
@_Kirill:很好的答案,但是如果分隔符是任意一組空格 - 它是按照XML架構列表類型定義的呢? :) –
@DimitreNovatchev,這就是爲什麼我說「嚴格間隔」... –
@_Kirill:這將是更好的改善解決方案本身:) –
隨着你可以寫你自己的拆分功能一點點想象力:
<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output method='text'/>
<xsl:template name="split-list">
<xsl:param name="list" />
<xsl:param name="separator"/>
<xsl:variable name="newlist" select="concat(normalize-space($list), $separator)" />
<xsl:variable name="first" select="substring-before($newlist, $separator)" />
<xsl:variable name="remaining" select="substring-after($newlist, $separator)" />
<xsl:message terminate="no">
<xsl:value-of select="$first" />
</xsl:message>
<xsl:if test="$remaining">
<xsl:call-template name="split-list">
<xsl:with-param name="list" select="$remaining" />
<xsl:with-param name="separator" select="$separator"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template match="/">
<xsl:variable name="myList">
1 2 3.2 5.6
</xsl:variable>
<xsl:call-template name="split-list">
<xsl:with-param name="list" select="$myList" />
<xsl:with-param name="separator">
<xsl:text> </xsl:text>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>
輸出:
[xslt] Loading stylesheet D:\Tools\StackOverFlow\test.xslt
[xslt] 1
[xslt] 2
[xslt] 3.2
[xslt] 5.6
在架構感知轉換中,使用count(data(value))
。
一個元素是 然而,您所指的元素將被xslt處理器解釋爲文本。 –
FailedDev