XSLT3.0处理JSON转XML时如何按键名而非索引定位同级url节点
问题原因
你用键名查询失败是对json-to-xml函数的输出结构不熟悉:XPath 3.1 转换JSON到XML时,不会把JSON的键作为XML元素名,所有键都会存储为对应元素的key属性,元素名则和JSON值的类型对应(比如字符串对应<string>、对象对应<map>)。你要查询的url对应的XML节点实际是<string key="url">http:www.example-10.com</string>,不是<url>,所以直接写../../url无法匹配到节点。
解决方案
完全可以用键名替代索引号查询,将你注释的测试4的写法替换为以下内容即可,不受JSON字段顺序调整的影响,比索引号更稳定:
<xsl:value-of select="../../*[@key = 'url']"/>
如果担心相对路径导航出错,也可以用全局定位的写法直接获取url节点,不需要逐级找父节点:
<xsl:value-of select="/*/map:map/*[@key = 'url']"/>
注意:map命名空间你已经在XSLT顶部声明过,可以直接使用
替换后运行即可得到你预期的输出结果。
内容的提问来源于stack exchange,提问作者Toolbox
相关产品推荐
相关产品推荐

