使用 parse-json() 的 xslt 遍历器
xslt traverser using parse-json()
我这里有下面json
{
"array1": [
{
"id": "banglore",
"mappingData": [
{
"name": "v1",
"Data": [
{
"idFromIndia": "0001"
}
]
},
{
"name": "v2",
"Data": [
{
"idFromIndia": "0001"
},
{
"idFromIndia": "0001"
}
]
}
]
}
]
}
这是我的 xslt
1st 我进入 array1 对象并再次遍历 mappingData 数组然后如果
name="v2" 遍历Data数组对象里面的数据
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:map="http://www.w3.org/2005/xpath-functions/map"
xmlns:array="http://www.w3.org/2005/xpath-functions/array" exclude-result-prefixes="#all"
version="3.0">
<xsl:output omit-xml-declaration="no" indent="yes"/>
<xsl:param name="input"/>
<xsl:variable name="newline" select="' '"/>
<xsl:template match="/" name="xsl:initial-template">
<xsl:variable name="input-as-map" select="parse-json($input)" as="map(*)"/>
<root>
<data1>
<xsl:for-each select="$input-as-map?array1?*?mappingData?*[string[@key='name']/string ='v2']?Data?*">
<xsl:value-of select="?idFromIndia"/>
</xsl:for-each>
</data1>
</root>
</xsl:template>
</xsl:stylesheet>
这里在mappingData数组中当name=v2然后遍历Data
数组里面的数据
任何建议也会有所帮助
我认为你基本上想要“XPath 3.1 查找路径”?array1?*?mappingData?*[?name ='v2']?Data?*
而不是你尝试过的,在你的样本中的某个地方看起来好像你在查找中间切换到使用经典XPath 路径 expressions/predicates 可以针对 JSON 的 XML 表示,但为此您需要使用 json-to-xml
,显然您需要使用一致的方法。
可能不需要for-each
:
<xsl:value-of select="$input-as-map?array1?*?mappingData?*[?name ='v2']?Data?*?idFromIndia"/>
我这里有下面json
{
"array1": [
{
"id": "banglore",
"mappingData": [
{
"name": "v1",
"Data": [
{
"idFromIndia": "0001"
}
]
},
{
"name": "v2",
"Data": [
{
"idFromIndia": "0001"
},
{
"idFromIndia": "0001"
}
]
}
]
}
]
}
这是我的 xslt 1st 我进入 array1 对象并再次遍历 mappingData 数组然后如果 name="v2" 遍历Data数组对象里面的数据
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:map="http://www.w3.org/2005/xpath-functions/map"
xmlns:array="http://www.w3.org/2005/xpath-functions/array" exclude-result-prefixes="#all"
version="3.0">
<xsl:output omit-xml-declaration="no" indent="yes"/>
<xsl:param name="input"/>
<xsl:variable name="newline" select="' '"/>
<xsl:template match="/" name="xsl:initial-template">
<xsl:variable name="input-as-map" select="parse-json($input)" as="map(*)"/>
<root>
<data1>
<xsl:for-each select="$input-as-map?array1?*?mappingData?*[string[@key='name']/string ='v2']?Data?*">
<xsl:value-of select="?idFromIndia"/>
</xsl:for-each>
</data1>
</root>
</xsl:template>
</xsl:stylesheet>
这里在mappingData数组中当name=v2然后遍历Data
数组里面的数据
任何建议也会有所帮助
我认为你基本上想要“XPath 3.1 查找路径”?array1?*?mappingData?*[?name ='v2']?Data?*
而不是你尝试过的,在你的样本中的某个地方看起来好像你在查找中间切换到使用经典XPath 路径 expressions/predicates 可以针对 JSON 的 XML 表示,但为此您需要使用 json-to-xml
,显然您需要使用一致的方法。
可能不需要for-each
:
<xsl:value-of select="$input-as-map?array1?*?mappingData?*[?name ='v2']?Data?*?idFromIndia"/>