我试图通过迭代对象数组并创建一个新数组来收集我感兴趣的字符串。我稍后会在转换中使用这个新数组来生成输出。
下面是我的代码:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:map="http://www.w3.org/2005/xpath-functions/map"
xmlns:array="http://www.w3.org/2005/xpath-functions/array"
version="3.0">
<xsl:output method="text"/>
<xsl:strip-space elements="*" />
<xsl:template name="test" match="/">
<xsl:param name="data" select="data"></xsl:param>
<xsl:variable name="myData" select="$data" />
<xsl:variable name="inputArray" select="array{'John', 'Peter'}"/>
<xsl:variable name="myArray" select="array{}"/>
<xsl:for-each select="1 to array:size($inputArray)">
<xsl:variable name="personName" select="array:get($inputArray, .)" />
<xsl:value-of select="$personName" />
<xsl:variable name="myArray" select="array:append($myArray, personName)" />
</xsl:for-each>
<!-- <xsl:variable name="myArray" select="array:append($myArray, 'John')" />
<xsl:variable name="myArray" select="array:append($myArray, 'Peter')" /> -->
<xsl:for-each select="1 to array:size($myArray)">
<xsl:value-of select="test" />
<xsl:text>Person name is : </xsl:text>
<xsl:value-of select="array:get($myArray,.)" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
这不会将值附加到 myArray 中,甚至不会进入 for-each 块来输出“test”字符串。
使用 XPath 3.1,不要用迭代之类的程序术语来思考,那么你可以这样做
<xsl:variable name="inputArray" select="array{'John', 'Peter'}"/>
<xsl:variable name="myArray" select="array{ $inputArray?* }"/>
我们也可以用
fold-left
来拼写它,或者,如果你真的想“迭代”,xsl:iterate
,但我认为没有任何必要。