C# 如何在XML文件中的单个父元素中选择多个子元素的值
我想从属于单个父元素的XML文件中选择5个元素值 我遵循了几个“选择所有元素…”或“将元素置于单个父项下…”的示例,但它们没有回答这个问题。至少在某种程度上我不能应用相同的解决方案C# 如何在XML文件中的单个父元素中选择多个子元素的值,c#,xml,C#,Xml,我想从属于单个父元素的XML文件中选择5个元素值 我遵循了几个“选择所有元素…”或“将元素置于单个父项下…”的示例,但它们没有回答这个问题。至少在某种程度上我不能应用相同的解决方案 { var xdoc = XElement.Load(FileName); List<string> locations = new List<string>(); loc
{
var xdoc = XElement.Load(FileName);
List<string> locations = new List<string>();
locations = xdoc.Elements("Locations")
.Where(x => x.Attribute("ID").Value == lab)
.SelectMany(e => e.Elements("Location").Select(n => n.Attribute("ID").Value)).ToList();
foreach (string id in locations)
{
locID += id + "," ;
}
locID.TrimEnd(',');
}
{
var xdoc=XElement.Load(文件名);
列表位置=新列表();
位置=xdoc.元素(“位置”)
.Where(x=>x.Attribute(“ID”).Value==lab)
.SelectMany(e=>e.Elements(“位置”).Select(n=>n.Attribute(“ID”).Value)).ToList();
foreach(位置中的字符串id)
{
locID+=id+“,”;
}
locID.TrimEnd(',');
}
XML文件的一部分
<Locations ID="North America">
<Location ID="23023" />
<Location ID="23024" />
<Location ID="20323" />
<Location ID="22483" />
</Locations>
西班牙和南美还有其他类似的街区
我想要一个逗号分隔的位置ID字符串,但位置列表的计数为0。我无法正确选择。如果有多个位置元素,您可以尝试以下操作:
doc.Root.Elements("Locations").Elements("Location").Select(x=>x.Attribute("ID").Value)
var csv = string.Join(',', ids);
如果您只是在查找ID,则不需要.SelectMany()我们可以查看更多XML吗?足以说明结构吗?根据您提供的XML片段测试代码是不可能的。例如,
xdoc.Elements(“Locations”)
返回什么?他不需要这个,因为他使用的是已经只返回根元素的XElement.Load(string uri)。从他的问题来看,他的XML文件中似乎有多个Locations
元素:“西班牙和南美还有其他类似的块。”因此,这里有一个我们不知道的结构,他确实需要从许多元素中只选择一个位置元素的子元素。我相信他需要将XElement.Load()
更改为XDocument.Load()
。我测试了XElement.Load(),它工作得非常好,消除了那种奇怪的“先获取根元素”首先,谢谢你的回复。我的问题最终是变量实验室的一个输入错误。我有一个逃逸的符号,它应该是一个符号。我纠正了这个问题,结果还是写得那么好。但我喜欢你的答复,因为它简短明了。