如何获取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做到这一点?
答
假设所需的元素总是<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();
如果你有一个XML刚刚生成的XSD.EXE XSD,然后生成类(也XSD.EXE)。然后,您可以使用xmlserializer将您的xml序列化为您生成的类结构。 – 2014-12-04 12:52:22
第一个深度标签元素是否是view元素的子元素?然后按照下面Ben的说法做... – helb 2014-12-04 12:53:32
如果你只是想''的直接子代,那么使用'xmlElement.Elements(“tag”)'而不是'Descendants()'。 –
2014-12-04 12:53:43