0

我有一个这样的xml文件:

  <xml>
    <students>
      <person name=jhon/>
      <person name=jack/>
      ...
    </students>
    <teachers>
       <person name="jane" />
       <person name="jane" />
       ...
    </teachers>
  </xml>

如果我使用此代码:

var xml = XDocument.Parse(myxmlstring, LoadOptions.None);
foreach(XElement studentelement in xml.Descendants("person"))
{
    MessageBox.Show(studentelement.Attribute("name").Value);
}

一切正常!但是,我不知道我是在迭代学生还是老师。

但是当我尝试时:

var a = xml.Element("students");

a 为空!!!

如何使用 c# 在我的 xml 文档中选择特定元素?

如果我可以先迭代学生,填充一些列表框并迭代老师并做其他事情,那就太棒了。:)

xml文件不能修改,以防万一...

最后,我真正想要的只是在我的文件中获取特定元素的所有子元素。

感谢大家!!!

4

2 回答 2

4

但是当我尝试时: var a = xml.Element("students");

a 为空!!!

是的,因为xml是文档,并且它下面只有一个直接元素 - 称为xml. 如果您使用:

var students = xml.Root.Element("students");

相反,它会<students>直接在根元素下方寻找,它会起作用。

或者,您可以使用Element两次:

var students = xml.Element("xml").Element("students");

或者使用Descendants,当然。

此外,您可以使用Parent属性访问元素的父元素......因此,如果您想遍历所有 person元素并出于某种原因使用父元素名称,您当然可以这样做。

于 2012-11-27T16:40:46.683 回答
1

Element只返回直接子节点。要递归浏览 xml 树,请Descendants改用。

要依次枚举学生和教师,您可以执行以下操作:

var xml = XDocument.Parse(myxmlstring, LoadOptions.None);

var students = xml.Descendants("students");
var teachers = xml.Descendants("teachers");

foreach (var studentElement in students.Descendants("person"))
{
    MessageBox.Show(studentElement.Attribute("name").Value);
}

foreach (var teacherElement in teachers.Descendants("person"))
{
    MessageBox.Show(teacherElement.Attribute("name").Value);
}
于 2012-11-27T16:43:57.420 回答