【问题标题】:Json to XML tool? [closed]Json 转 XML 工具? [关闭]
【发布时间】:2010-12-04 11:16:25
【问题描述】:

我有一个 json 文件,但我使用的应用程序仅从 xml 文件导入数据。那么有人知道将json文件转换为xml的工具吗?我一直在寻找这样的工具几个小时,只能找到从 xml 创建 json 文件的工具。

谢谢!

【问题讨论】:

  • 有关 XSLT 转换器的问题(非常酷):stackoverflow.com/questions/559296/…
  • 显然JSON->XML转换的问题是JSON不区分属性、值和子元素,所以没有一对一的映射。

标签: xml json


【解决方案1】:

如果您使用的是 .NET Framework,则可以在代码中执行此操作:

  • 使用 JsonReaderWriterFactory 类在您的 JSON 内容上创建一个 JSON 阅读器
  • 创建一个常规 XmlWriter,并在其上调用 WriteNode,为其提供 JSON 阅读器。它会写出与您的 JSON 相对应的 XML。

注意事项:

  • 这将使用 Microsoft 专有的 JSON 到 XML 映射(没有标准映射)。 XML 看起来会很奇怪。
  • .NET3.5 中有一些严重的错误阻止了这种情况。也许在 .NET 3.5 SP1 中已修复,也许在 4.0 中已修复,在 Silverlight 3 中肯定已修复

【讨论】:

    【解决方案2】:

    纯 XSLT 2.0 实现

    看看f:json-document() 来自FXSL 2.x library

    使用这个函数可以非常容易地合并 JSon 并将其用作... XML。

    例如,只需编写以下 XPath 表达式:

    f:json-document($vstrParam)/Students/*[sex = 'Female']
    

    并且使用sex = 'Female'获取Students的所有子节点

    这是完整的示例:

    <xsl:stylesheet version="2.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xmlns:xs="http://www.w3.org/2001/XMLSchema"
     xmlns:f="http://fxsl.sf.net/"
     exclude-result-prefixes="f xs"
     >
     <xsl:import href="../f/func-json-document.xsl"/>
    
     <xsl:output omit-xml-declaration="yes" indent="yes"/>
    
     <xsl:variable name="vstrParam" as="xs:string">
    {
    
      "teacher":{
        "name":
          "Mr Borat",
        "age":
          "35",
        "Nationality":
          "Kazakhstan"
                 },
    
    
      "Class":{
        "Semester":
          "Summer",
        "Room":
          null,
        "Subject":
          "Politics",
        "Notes":
          "We're happy, you happy?"
               },
    
      "Students":
        {
          "Smith":
            {"First Name":"Mary","sex":"Female"},
          "Brown":
            {"First Name":"John","sex":"Male"},
          "Jackson":
            {"First Name":"Jackie","sex":"Female"}
        }
        ,
    
    
      "Grades":
    
        {
          "Test":
          [
            {"grade":"A","points":68,"grade":"B","points":25,"grade":"C","points":15},
    
            {"grade":"C","points":2, "grade":"B","points":29, "grade":"A","points":55},
    
            {"grade":"C","points":2, "grade":"A","points":72, "grade":"A","points":65}
           ]
        }
    
    
    }
     </xsl:variable>
    
     <xsl:template match="/">
        <xsl:sequence select=
         "f:json-document($vstrParam)/Students/*[sex = 'Female']"/>
    
     </xsl:template>
    </xsl:stylesheet>
    

    当上述转换应用于任何 XML 文档(忽略)时,会产生正确的结果

    <Smith>
       <First_Name>Mary</First_Name>
       <sex>Female</sex>
    </Smith>
    <Jackson>
       <First_Name>Jackie</First_Name>
       <sex>Female</sex>
    </Jackson>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 2010-09-12
      • 2017-08-17
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      • 2010-11-28
      相关资源
      最近更新 更多