我有这种类型的xml文件,我正在尝试获取每个组的ID和主机。
<AAA>
<Group>BTeam</Group>
<CCC>
<DDD>
<Id>1234</Id>
<Host>BTeamHost</Host>
</DDD>
</CCC>
</AAA>
<AAA>
<Group>CTeam</Group>
<CCC>
<DDD>
<Id>3234</Id>
<Host>CTeamHost</Host>
</DDD>
</CCC>
</AAA>
当前,我能够获取文件中的每个组,但是下面的代码在该组上不匹配。值
XDocument xdoc = XDocument.Load(xml);
foreach (XElement group in xdoc.Root.Descendants("AAA").Elements("Group"))
{
if (xdoc.Root.Descendants("AAA").Elements("Group").Equals(group.Value))
{
var id = xdoc.Root.Descendants("AAA").Descendants("CCC").Descendants("DDD").Descendants("Id").FirstOrDefault().Value;
var host = xdoc.Root.Descendants("AAA").Descendants("CCC").Descendants("DDD").Descendants("Host").FirstOrDefault().Value;
Console.WriteLine("Group: {0} Id: {1} Host: {2}", group, id, host);
}
}
如果我只是尝试这样做,我将从第一个组而不是每个组中获得相同的ID和主机。
XDocument xdoc = XDocument.Load(xml);
foreach (XElement group in xdoc.Root.Descendants("AAA").Elements("Group"))
{
var id = xdoc.Root.Descendants("AAA").Descendants("CCC").Descendants("DDD").Descendants("Id").FirstOrDefault().Value;
var host = xdoc.Root.Descendants("AAA").Descendants("CCC").Descendants("DDD").Descendants("Host").FirstOrDefault().Value;
Console.WriteLine("Group: {0} Id: {1} Host: {2}", group, id, host);
}
组:BTeam ID:1234主机:BTeamHost
组:CTeam ID:1234主机:BTeamHost
答案 0 :(得分:0)
您可以通过在<CCC>
上调用ElementsAfterSelf
来获得对group
元素的引用。这将打印两个组:
XDocument xdoc = XDocument.Load(xml);
foreach (XElement group in xdoc.Root.Descendants("AAA").Elements("Group"))
{
var ddd = group.ElementsAfterSelf("CCC").Descendants("DDD");
var id = ddd.Descendants("Id").FirstOrDefault().Value;
var host = ddd.Descendants("Host").FirstOrDefault().Value;
Console.WriteLine("Group: {0} Id: {1} Host: {2}", group.Value, id, host);
}
答案 1 :(得分:0)
尝试以下操作:
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)
{
XDocument doc = XDocument.Load(FILENAME);
var results = doc.Descendants("AAA")
.GroupBy(x => x.Element("Group"))
.Select(x => new
{
group = x.Key,
id = (string)x.Descendants("Id").FirstOrDefault(),
host = (string)x.Descendants("Host").FirstOrDefault()
})
.ToList();
}
}
}