>我正在尝试将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()
}));
}
}
}
}
}