2014-12-04 131 views
1

我正在加載一個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

回答

1

假設所需的元素總是<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();