2014-10-22 165 views
0

我遇到了一个需求,我需要根据XSLT将转移JSON数据转换为各种XML文档。 实际上,同样的json数据会传到不同的系统,并且他们有自己的对象结构(属性嵌套级别等)来存储它。我使用C#中的XslCompiledTransform()将Xml转换为Json;我使用XslCompiledTransform()现在看看是否有任何有效的方法将JSON转换为XML 使用XSLT使用XSLT将JSON转换为XML

+0

您的问题太宽了,我很害怕。另外,XSLT可能是一个相当差的选择,因为它意味着将XML文档转换为其他方式,而不是其他方式。如果您已经在C#中有工作解决方案,为什么您需要开始使用XSLT? – 2014-10-22 08:01:33

+0

@MathiasMüller:实际上,有一种情况是相同的json数据发送到不同的系统,并且他们有自己的对象结构(属性嵌套级别等)来存储它。 – 2014-10-22 08:06:16

+0

我认为我们需要更多的细节才能够帮助你。由于XSLT将xml文档作为输入,它不应该是您第一次将JSON转换为XML的调用。但是,如果您仍然需要,您可以使用虚拟XML文档(又名:作为内容)输入到您的XSLT并使用XSLT函数:unparsed-text($ documentURI,$ encodage)来访问您的JSON。但是您仍然需要以原始字符串的形式访问JSON数据的内容。 – 2014-10-22 10:18:06

回答

0

XSLT是一个XML文档切换到另一个XML文档,但是,JSON甚至不是一个XML类型的文件..

您可以编写一个简单的应用程序传输格式

0

撇开事实,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" />)。