想要将 xml 属性结构转换为 xml 标记结构

  • 本文关键字:xml 结构 转换 属性 c# xml
  • 更新时间 :
  • 英文 :


>我正在尝试将XML属性结构转换为XML标记结构。

<company>
<Name value="SomeCompany" /name>
<Count value ="500"/>
</Company>

<Company>
<Name>SomeCompany</name>
<EmployeeCount> 500<EmployyeCount>
</Company>

这里的问题是输入XML属性结构是动态的。我们不知道它的确切架构。

我尝试使用Newtonsoft将输入xml模式转换为json对象(序列化(,并且能够将属性名称从计数转换为Employe计数。 但是我无法将相同的json转换为xml标签结构(反序列化(。

{     XmlDocument infodoc = new XmlDocument();
infodoc.Load(@"C:Usersdummydesktoptest.xml");
string jsonText = JsonConvert.SerializeXmlNode(infodoc);
UpadtedXML h = JsonConvert.DeserializeObject<UpadtedXML 
(jsonText);
}

Json 采用以下格式:

{"Company":{"Name":{"@value":"someCompany"},"EmployeeCount":{"@value":"500"}

预期结果如下:

<Company>
<Name>SomeCompany</name>
<EmployeeCount> 500<EmployyeCount>
</Company>

以下代码应适用于任何复杂的 xml 文件。 我正在使用 Xml Linq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication124
{
class Program
{
static void Main(string[] args)
{
string input =
"<Company>n" +
"<Name value="SomeCompany"> </Name>n" +
"<Count value ="500"/>n" +
"</Company>";
XDocument doc = XDocument.Parse(input);
List<XElement> nodes = doc.Descendants().ToList();
for (int i = nodes.Count - 1; i >= 0; i--)
{
XElement node = nodes[i];
if ((string)node.Attribute("value") != null)
{
node.ReplaceWith(new XElement(node.Name.LocalName, new object[] {
node.Attributes().Where(x => x.Name.LocalName != "value"),
(string)node.Attribute("value"),
node.DescendantNodes()
}));
}
}
}
}
}

最新更新