c# - 使用 C# 从 xmls 创建 XMLs
问题描述
我有一个 XML 文件。我正在寻求帮助以从此 xml 文件创建多个 xml 文件。新的 xml 将具有具有相同 EmpID 的所有节点。我正在使用 C# 代码并且能够创建 xmls Xml 看起来像这样 -
<?xml version="1.0" encoding="utf-8"?>
<Connected>
<Emp>
<A.EMPLID>1</A.EMPLID>
<A.Phone>12##</A.Phone>
</Emp>
<Emp>
<A.EMPLID>1</A.EMPLID>
<A.Add>XXXXXXX</A.Add>
</Emp>
<Emp>
<A.EMPLID>2</A.EMPLID>
<A.Phone>##34</A.Phone>
</Emp>
<Emp>
<A.EMPLID>3</A.EMPLID>
</Emp>
<Emp>
<A.EMPLID>3</A.EMPLID>
<A.Add>XXXXXXX</A.Add>
</Emp>
</Connected>
对于 3 个不同的 EmplId,输出将是 3 个不同的 Xml
1.xml
<Connected>
<Emp>
<A.EMPLID>1</A.EMPLID>
<A.Phone>12##</A.Phone>
</Emp>
<Emp>
<A.EMPLID>1</A.EMPLID>
<A.Add>XXXXXXX</A.Add>
</Emp>
</Connected>
2.xml
<Connected>
<Emp>
<A.EMPLID>2</A.EMPLID>
<A.Phone>##34</A.Phone>
</Emp>
</Connected>
3.xml
<Connected>
<Emp>
<A.EMPLID>3</A.EMPLID>
</Emp>
<Emp>
<A.EMPLID>3</A.EMPLID>
<A.Add>XXXXXXX</A.Add>
</Emp>
</Connected>
我正在尝试执行该 C# 代码。使用 XElement
XElement x = new XElement("Connected",new XElement("Emp",new XElement("A.EMPLID", group.Key),group.Select(g => g.Elements().Where(e =>e.Name != "A.EMPLID"))));
但它正在创造这样的东西:
<?xml version="1.0" encoding="utf-8"?>
<Connected>
<Emp>
<A.EMPLID>1</A.EMPLID>
<A.Phone>12##</A.Phone>
<A.Add>XXXXXXX</A.Add>
</Emp>
</Connected>
我需要为 Empld 生成的 3 个 xml,但节点的顺序应该完全相同。
解决方案
使用 xml linq:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
string ident = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Connected></Connected>";
XDocument doc = XDocument.Load(FILENAME);
var groups = doc.Descendants("Emp").GroupBy(x => (string)x.Element("A.EMPLID")).ToList();
foreach (var group in groups)
{
XDocument doc1 = XDocument.Parse(ident);
XElement root = doc1.Root;
root.Add(group);
doc1.Save(@"c:\temp\test" + group.Key + ".xml");
}
}
}
}
推荐阅读
- haskell - 如何编写 Continuation Monad 的 Functor 实例?
- php - 使用php中的ID根据查询输出输出不同的表
- java - 如何检查Android中缺少任何类?
- python-3.x - boto3 模块安装在 conda 虚拟环境中,但获取模块不可用
- javascript - 如何在 Angular 中创建月份范围选择器
- string - 大会 x86:LEA 和 MOVSB 更改了我的源字符串?
- julia - 在 Catalina 机器上安装 Julia 0.6.4
- switch-statement - 如何在switch语句中使用变量
- jquery - Svelte 和 Jquery - Dropdown.svelte:7 Uncaught TypeError: jquery(...).dropdown is not a function
- python - 用不同的填充符号填充其他多边形内的多边形