C# 在特定属性处连接3个XML文档,并使用C中的LINQ获取单个XML文档 我有3个xml文档数据。 每个都有相似的属性ID 我试图加入2个XML,但没有得到任何乐趣,因为它导致错误地说objectnull blaa..blaa。 是否有人可以帮助我创建如下第四个XML输出
Xml属性值需要在值周围加上双引号,如 请参见下面的xml linq解决方案:C# 在特定属性处连接3个XML文档,并使用C中的LINQ获取单个XML文档 我有3个xml文档数据。 每个都有相似的属性ID 我试图加入2个XML,但没有得到任何乐趣,因为它导致错误地说objectnull blaa..blaa。 是否有人可以帮助我创建如下第四个XML输出,c#,xml,linq,C#,Xml,Linq,Xml属性值需要在值周围加上双引号,如 请参见下面的xml linq解决方案: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; using System.Xml.Linq; namespace ConsoleApplication4 { class Program { const string FILE
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication4
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
const string FILENAME1 = @"c:\temp\test1.xml";
const string FILENAME2 = @"c:\temp\test2.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
XDocument doc1 = XDocument.Load(FILENAME1);
XDocument doc2 = XDocument.Load(FILENAME2);
var joins = (from d in doc.Descendants("person")
join d1 in doc1.Descendants("person") on (int)d.Attribute("id") equals (int)d1.Attribute("id")
join d2 in doc2.Descendants("person") on (int)d.Attribute("id") equals (int)d2.Attribute("id")
select new { d = d, d1 = d1, d2 = d2 }
).ToList();
string ident = "<?xml version=\"1.0\" encoding=\"utf-8\" ?> <person></person>";
XDocument outputXml = XDocument.Parse(ident);
XElement persons = outputXml.Root;
foreach (var join in joins)
{
XElement person = XElement.Parse(join.d.ToString());
person.Add(XElement.Parse(join.d1.Element("phone").ToString()));
person.Add(XElement.Parse(join.d2.Element("country").ToString()));
persons.Add(person);
}
}
}
}
嗨@jdweng。非常感谢您对此进行调查。我能够毫无差错地通过此测试。但仍然无法创建所需的输出。我的意思是,如何将var连接转换为新的xml输出,如上所述。对不起,你是天才。10******. 从昨晚开始我就在挣扎。你现在对我来说就像上帝一样。万分感谢:将您的解决方案标记为答案
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication4
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
const string FILENAME1 = @"c:\temp\test1.xml";
const string FILENAME2 = @"c:\temp\test2.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
XDocument doc1 = XDocument.Load(FILENAME1);
XDocument doc2 = XDocument.Load(FILENAME2);
var joins = (from d in doc.Descendants("person")
join d1 in doc1.Descendants("person") on (int)d.Attribute("id") equals (int)d1.Attribute("id")
join d2 in doc2.Descendants("person") on (int)d.Attribute("id") equals (int)d2.Attribute("id")
select new { d = d, d1 = d1, d2 = d2 }
).ToList();
string ident = "<?xml version=\"1.0\" encoding=\"utf-8\" ?> <person></person>";
XDocument outputXml = XDocument.Parse(ident);
XElement persons = outputXml.Root;
foreach (var join in joins)
{
XElement person = XElement.Parse(join.d.ToString());
person.Add(XElement.Parse(join.d1.Element("phone").ToString()));
person.Add(XElement.Parse(join.d2.Element("country").ToString()));
persons.Add(person);
}
}
}
}