将多个XML转换为JSON列表

时间:2017-03-06 22:06:48

标签: c# json xml powershell

我想使用PowerShell脚本将具有相同XML属性格式的多个XML文件转换为JSON文件。我们的想法是创建一个JSON列表,每个项目都是XML文件的JSON表示。它可行吗?输入和输出的一个例子:

输入:

File1.xml

<File>
<Child1> First xml child 1</Child1>
<Child2>First xml child 2</Child2>
</File>

File2.xml

<File>
<Child1> Second xml child 1</Child1>
<Child2>Second xml child 2</Child2>
</File>

输出:

[
  {
    File: [
      {Child1 : First xml child 1 },
      { Child2: First xml child 2}
    ]
  },
  {
    File: [
      {Child1 : Second xml child 1 },
      { Child2: Second xml child 2}
    ]
  }
]

3 个答案:

答案 0 :(得分:3)

在Powershell 7中,这对我有用:

import jpype
jpype.startJVM(classpath=['test/classes'], convertStrings=False)
j = jpype.JClass('jpype.common.Fixture') # success
j = jpype.JClass('jpype/common/Fixture') # fails

答案 1 :(得分:1)

以下使用辅助函数ConvertFrom-Xml仅非常简单的XML文档(例如示例文档)转换为带有有序键的嵌套哈希表,然后可以将其转换为JSON, ConvertTo-Json

# Helper function that converts a *simple* XML document to a nested hashtable
# with ordered keys.
function ConvertFrom-Xml {
  param([parameter(Mandatory, ValueFromPipeline)] [System.Xml.XmlNode] $node)
  process {
    if ($node.DocumentElement) { $node = $node.DocumentElement }
    $oht = [ordered] @{}
    $name = $node.Name
    if ($node.FirstChild -is [system.xml.xmltext]) {
      $oht.$name = $node.FirstChild.InnerText
    } else {
      $oht.$name = New-Object System.Collections.ArrayList 
      foreach ($child in $node.ChildNodes) {
        $null = $oht.$name.Add((ConvertFrom-Xml $child))
      }
    }
    $oht
  }
}

[xml[]] (Get-Content -Raw file[12].xml) | ConvertFrom-Xml | ConvertTo-Json -Depth 3

使用您的示例文件,可以得到:

[
    {
        "File":  [
                     {
                         "Child1":  " First xml child 1"
                     },
                     {
                         "Child2":  "First xml child 2"
                     }
                 ]
    },
    {
        "File":  [
                     {
                         "Child1":  " Second xml child 1"
                     },
                     {
                         "Child2":  "Second xml child 2"
                     }
                 ]
    }
]

答案 2 :(得分:0)

编写您自己的格式顶部

// To convert an XML node contained in string xml into a JSON string   
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
string jsonText = JsonConvert.SerializeXmlNode(doc);