使用 C# 从 xml 创建 XML
Create XMLs from xmls using C#
我有一个 XML 文件。我正在寻求帮助,以从此 xml 文件创建多个 xml 文件。新的 xml 将拥有所有具有相同 EmpID.I 的节点 am 使用 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");
}
}
}
}
另一种实现方式是使用 XPath。
var empElements = xmlDocument.SelectNodes("//Emp[A.EMPLID=1]");
以上查询将 return 属于特定 ID(在本例中为 1)的所有 节点。
我有一个 XML 文件。我正在寻求帮助,以从此 xml 文件创建多个 xml 文件。新的 xml 将拥有所有具有相同 EmpID.I 的节点 am 使用 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 个不同的 Xml1.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");
}
}
}
}
另一种实现方式是使用 XPath。
var empElements = xmlDocument.SelectNodes("//Emp[A.EMPLID=1]");
以上查询将 return 属于特定 ID(在本例中为 1)的所有