如何获取xml元素的特定子元素?

问题描述:

我正在加载一个xml文档,我在其元素中有一个foreach循环,我想选择其中的名为tag的子元素。如何获取xml元素的特定子元素?

这是XML文件:

<?xml version="1.0" encoding="utf-8"?> 
<view> 
    <tag> 
     <name>content</name> 
     <tag> 
     <name>div</name> 
     </tag> 
    </tag> 
</view> 

这是代码:

string xmlString = System.IO.File.ReadAllText(HttpContext.Current.Server.MapPath("~/xml/xml.xml")); 
XDocument doc = XDocument.Parse(xmlString); 
XElement xmlElement = doc.Element("view"); 
foreach (var tagItem in xmlElement.Descendants("tag")) 
{ 
    //do something 
} 

写在foreach循环中的代码将包含在任何深度的所有标签的元素,但我想得到第一个深度的(孩子们)。

如何用linq做到这一点?

+0

如果你有一个XML刚刚生成的XSD.EXE XSD,然后生成类(也XSD.EXE)。然后,您可以使用xmlserializer将您的xml序列化为您生成的类结构。 – 2014-12-04 12:52:22

+0

第一个深度标签元素是否是view元素的子元素?然后按照下面Ben的说法做... – helb 2014-12-04 12:53:32

+2

如果你只是想''的直接子代,那么使用'xmlElement.Elements(“tag”)'而不是'Descendants()'。 – 2014-12-04 12:53:43

假设所需的元素总是<view>元素的儿童可以使用:

XElement xmlElement = doc.Element("view"); 
foreach (var tagItem in xmlElement.Elements("tag")) 
{ 
    //do something (only direct children) 
} 

没有什么更多的工作要做,以获得所需的元素。然后,您可以实现但是你“有所作为” LINQ的,例如:

XElement firstElem = xmlElement.Elements("tag").OrderBy(e => e.Name).First();