使用XSLT遍历JSON文档时无法提取name字段问题咨询
问题原因分析
你当前的代码存在两处核心路径错误:
- JSON转XML后的结构层次和你写的XPath不匹配:原JSON最外层map下首先是
data字段对应的子map,file数组在这个子map下,你直接从最外层map下找array[@key='file']本身就找不到对应节点 - 你遍历的是
file数组本身,而不是数组内的每个对象,且取name的路径完全错误:name是数组内每个对象的子字段,不是数组父节点的字段
修正后的完整XSLT样式表
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="3.0" xmlns="http://www.w3.org/2005/xpath-functions" xpath-default-namespace="http://www.w3.org/2005/xpath-functions" expand-text="yes"> <xsl:param name="input"/> <xsl:output method="text"/> <xsl:template name="xsl:initial-template"> <xsl:variable name="input-as-xml" select="json-to-xml($input)"/> <!-- 用array包裹输出所有file对象提取后的结果 --> <xsl:variable name="transformed-xml" as="element(array)"> <array> <!-- 定位到file数组,遍历数组内的每个map对象 --> <xsl:for-each select="$input-as-xml/map/map[@key='data']/array[@key='file']/map"> <map> <string key="date"> <!-- 直接取当前遍历对象下的name字段值 --> <xsl:value-of select="string[@key='name']"/> </string> </map> </xsl:for-each> </array> </xsl:variable> <xsl:value-of select="xml-to-json($transformed-xml)"/> </xsl:template> </xsl:stylesheet>
输出结果
运行后得到的提取结果如下:
[{"date":"harsha"},{"date":"manohar"}]
如果你只需要输出单个和你原格式对齐的结果,只需要调整XPath取数组的第一个元素即可,不需要外层array包裹。
内容的提问来源于stack exchange,提问作者vivek
相关产品推荐
相关产品推荐

