我有这种类型的xml文件,我正在尝试获取每个组的Id和Host。
<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> 目前,我可以获取文件中的每个组,但以下代码无法在group.Value上匹配
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
发布于 2019-07-05 19:21:01
您可以通过在group上调用ElementsAfterSelf来获取对<CCC>元素的引用。这将打印这两个组:
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);
}发布于 2019-07-05 21:14:38
尝试以下操作:
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();
}
}
}https://stackoverflow.com/questions/56901289
复制相似问题