我试图通过迭代对象数组并创建一个新数组来收集我感兴趣的字符串。我将在稍后的转换中使用这个新数组来生成输出。
下面是我的代码:
<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”字符串。
输入数组的源是如下对象数组:
map {"persons": [map {
"name": "John",
"age": 33,
"residence":"Permanent"
}, map {
"name": "Peter",
"age": 36,
"residence":"Temporary"
}
]
}
我将使用map:get($persons)函数阅读这个数组,并将名称收集到myArray中。
2条答案
按热度按时间bz4sfanl1#
给定此输入变量:
可以使用以下命令创建名称数组:
gdrx4gfi2#
使用XPath3.1,不要用迭代这样的过程术语来思考,那么你可以只做例如:
我们也可以用
fold-left
来说明,或者,如果你真的想“迭代”,xsl:iterate
,但我认为没有必要这样做。whole stylesheet可以是例如
为了处理Map,您仍然可以使用XPath 3.1根据属性构造数组: