使用XSLT将JSON转换为XML
问题描述:
我遇到了一个需求,我需要根据XSLT将转移JSON数据转换为各种XML文档。 实际上,同样的json数据会传到不同的系统,并且他们有自己的对象结构(属性嵌套级别等)来存储它。我使用C#中的XslCompiledTransform()将Xml转换为Json;我使用XslCompiledTransform()现在看看是否有任何有效的方法将JSON转换为XML 使用XSLT?使用XSLT将JSON转换为XML
答
我不认为这会奏效。 JSON不是基于XML的,因此您无法对其应用XSLT转换。 XML到JSON会起作用,但不能JSON到XML
编辑。我错了,看看这个:https://github.com/bramstein/xsltjson这个:How to convert json to xml using xslt
答
XSLT是一个XML文档切换到另一个XML文档,但是,JSON甚至不是一个XML类型的文件..
您可以编写一个简单的应用程序传输格式
答
撇开事实,XSLT是绝对不适合该工作的工具,这里是一个伪的方法如何,我会做,如果我曾经到:
- 在C#中创建一个扩展函数来完成真正的工作,即获取JSON字符串作为参数,返回一个通用的XPathNodeIterator XML块。
- 用XSLT正常处理返回最终的自定义转换格式。
的XSLT会再看看这样的事情(假设XSLT 1.0,因为在C#是):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:util="urn:JsonUtility.Converter"
>
<!-- Supplied from environment -->
<xsl:param name="json" />
<xsl:template match="/">
<xsl:variable name="xml" select="util:JSON2XML($json)" />
<!-- Start processing the returned XML -->
<xsl:apply-templates select="$xml/json" />
</xsl:template>
<xsl:template match="key">
<!-- output -->
</xsl:template>
<xsl:template match="array">
<!-- output -->
</xsl:template>
<!-- etc. -->
</xsl:stylesheet>
(或者,如果你在C#扩展创建最终的格式,你可以只请在根目录模板中执行<xsl:copy-of select="$xml" />
)。
您的问题太宽了,我很害怕。另外,XSLT可能是一个相当差的选择,因为它意味着将XML文档转换为其他方式,而不是其他方式。如果您已经在C#中有工作解决方案,为什么您需要开始使用XSLT? – 2014-10-22 08:01:33
@MathiasMüller:实际上,有一种情况是相同的json数据发送到不同的系统,并且他们有自己的对象结构(属性嵌套级别等)来存储它。 – 2014-10-22 08:06:16
我认为我们需要更多的细节才能够帮助你。由于XSLT将xml文档作为输入,它不应该是您第一次将JSON转换为XML的调用。但是,如果您仍然需要,您可以使用虚拟XML文档(又名: 作为内容)输入到您的XSLT并使用XSLT函数:unparsed-text($ documentURI,$ encodage)来访问您的JSON。但是您仍然需要以原始字符串的形式访问JSON数据的内容。 –
2014-10-22 10:18:06