C# 将多个XML转换为JSON列表
我想使用PowerShell脚本将具有相同XML属性格式的多个XML文件转换为JSON文件。其思想是创建一个JSON列表,其中每个项目都是XML文件的JSON表示。这可行吗?输入和输出示例: 输入:C# 将多个XML转换为JSON列表,c#,json,xml,powershell,C#,Json,Xml,Powershell,我想使用PowerShell脚本将具有相同XML属性格式的多个XML文件转换为JSON文件。其思想是创建一个JSON列表,其中每个项目都是XML文件的JSON表示。这可行吗?输入和输出示例: 输入: File1.xml: 第一个xml子对象1 第一个xml子对象2 File2.xml: 第二个xml子项1 第二个xml子对象2 输出: [ { 文件:[ {Child1:First xml child 1}, {Child2:第一个xml子2} ] }, { 文件:[ {Child1:Se
File1.xml
:
第一个xml子对象1
第一个xml子对象2
File2.xml
:
第二个xml子项1
第二个xml子对象2
输出:
[
{
文件:[
{Child1:First xml child 1},
{Child2:第一个xml子2}
]
},
{
文件:[
{Child1:Second xml child 1},
{Child2:第二个xml子2}
]
}
]
在这上面写下你自己的格式
// 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);
下面使用一个助手函数,
ConvertFrom-Xml
,仅将非常简单的Xml文档(如示例文档)转换为带顺序键的嵌套哈希表,然后可以使用ConvertTo-JSON
将其转换为JSON:
将*简单*XML文档转换为嵌套哈希表的辅助函数
#用有序的钥匙。
从Xml转换函数{
param([参数(必需,ValueFromPipeline)][System.Xml.XmlNode]$node)
过程{
如果($node.DocumentElement){$node=$node.DocumentElement}
$oht=[有序]@{}
$name=$node.name
if($node.FirstChild-is[system.xml.xmltext]){
$oht.$name=$node.FirstChild.InnerText
}否则{
$oht.$name=新对象System.Collections.ArrayList
foreach($node.ChildNodes中的子节点){
$null=$oht.$name.Add((从Xml转换为$child))
}
}
$oht
}
}
[xml[](获取内容-原始文件[12].xml)|从xml转换为Json-深度3
对于示例文件,这将产生:
[
{
“文件”:[
{
“Child1”:“第一个xml子1”
},
{
“Child2”:“第一个xml子2”
}
]
},
{
“文件”:[
{
“Child1”:“第二个xml子1”
},
{
“Child2”:“第二个xml子2”
}
]
}
]
在Powershell 7中,这适用于我:
get-content file.xml
<node>
<subnode attrib="this">hi</subnode>
</node>
[xml]$xml = get-content file.xml
[Newtonsoft.Json.JsonConvert]::SerializeXmlNode($xml)
{"node":{"subnode":{"@attrib":"this","#text":"hi"}}}
get content file.xml
你好
[xml]$xml=get content file.xml
[Newtonsoft.Json.JsonConvert]::SerializeXmlNode($xml)
{“node”:{“subnode”:{“@attrib”:“this”,“#text”:“hi”}}
“它可行吗?”当然可以。但是,在这里,其他人不会为您编写代码。到目前为止,您尝试了什么(显示您的代码),以及您需要帮助解决什么具体问题(代码中)?请允许我向新来者提供标准建议:如果答案解决了您的问题,请单击大复选标记接受它(✓) 在它旁边,也可以选择向上投票(向上投票需要至少15个信誉点)。如果您发现其他答案有帮助,请向上投票。接受(为此您将获得2个信誉点)和up voting有助于未来的读者。有关更多信息,请参阅。或者使用内置的JavaScriptSerializer
不依赖外部软件包,在PowerShell中,它可能会变得非常简单。我不确定OP为什么会在他们的问题中添加C#标记,但从问题文本中可以清楚地看出,他们需要PowerShell脚本。因此,如何将其转换为PowerShell脚本?完整的类型名称是什么,所有类型都是预安装的,还是需要下载依赖项?@mklement0[Newtonsoft.Json.JsonConvert]::SerializeXmlNode($xml)
谢谢,@js2010。我的评论旨在鼓励SGRao更新他们的答案以提供此类信息。请注意,NewtonSoft.Json
程序集不随Windows PowerShell提供(它随PowerShell[Core]提供)。我鼓励您发布自己的答案,其中显示了完整的PowerShell示例以及有关程序集可用性/如何获取程序集的背景信息。虽然(默认情况下)在Windows PowerShell中不可用(PowerShell版本高达v5.1),但这绝对是一个值得考虑的备选方案;在本案中,这将产生与问题中要求的不同的陈述。