json - 如何从 json-to-xml() 创建的 xml 中选择一个节点
问题描述
在将它转换为 XML 之后,我试图从 JSON 中获取一个元素。
工作示例:https ://xsltfiddle.liberty-development.net/gWmuiJf/1
在这个例子中,它被成功解析,但是当我想用下面的代码选择一个节点时,我无法带来我需要的数据。
<xsl:copy-of select="json-to-xml(root)//map[@key='identifier']"/>
JSON:
<root><![CDATA[{
"identifier": {
"use": "<div xmlns=\"http://www.w3.org/1999/xhtml\"> </div>"
}
}]]></root>
XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="3.0">
<xsl:output indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select="json-to-xml(root)"/>
</xsl:template>
</xsl:stylesheet>
我想要的输出是这样的:
<map key="identifier">
<string key="use"><div xmlns="http://www.w3.org/1999/xhtml"> </div></string>
</map>
或这个
<string key="use"><div xmlns="http://www.w3.org/1999/xhtml"> </div></string>
解决方案
生成的 XMLjson-to-xml
具有默认命名空间
<map xmlns="http://www.w3.org/2005/xpath-functions">
<map key="identifier">
<string key="use"><div xmlns="http://www.w3.org/1999/xhtml"> </div>
</string>
</map>
</map>
您的 XSLT 正在寻找一个map
in no namespace。因此,您将不得不调整 xpath 以应对任何命名空间,但还需要使用xsl:apply-templates
一个模板来从元素中删除命名空间。
试试这个 XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="3.0">
<xsl:output indent="yes"/>
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="/">
<xsl:apply-templates select="json-to-xml(root)//*:map[@key='identifier']"/>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- bash - Imagemagick偶尔意外结束文件
- c# - 在 C# 中使用片段解析相对 URI 引用
- javascript - 使用 javascript 和 Tampermonkey 在 Input 中模拟 Enter 键
- laravel - 缺少必需的参数
- python - Cron 作业运行,但不记录到文件,也不将数据输出到 .csv
- python - python中的json列表操作
- postgresql - Postgresql 备份文件恢复失败
- python - 如何从熊猫数据框中获取最后 15 个值的总和
- nuxt.js - nuxt-link 在无序列表中不起作用
- c - 函数指针存在于 C 中的结构内