如何搜索XML标签?

时间:2014-04-26 11:15:39

标签: c# xml linq

我想用XML搜索标签。 我的XML是: -

<school>
  <student>
    <firstname>Vijay</firstname>
    <lastname>Prabhu</lastname>
    <age>27</age>
    <photo>/NewExample;component/Images/icon_man.png</photo>
  </student>
  <student>
    <firstname>Arun</firstname>
    <lastname>Prasath</lastname>
    <age>5</age>
    <photo>/NewExample;component/Images/icon_man.png</photo>
  </student>
  <student>
    <firstname>Satheesh</firstname>
    <lastname>Kumar</lastname>
    <age>27</age>
  </student> 
</school>

我想检查<photo>标签是否可用。 我试过这样的。

  var school= from ack in xdoc.Descendants("school")
                           select ack;
for(int i =0;i<school.count();i++)
{
  if(school.ElementAt(i).Element("photo").Name.LocalName.Equals("photo"));
    Console.WriteLine("Tag is available in==>"+i);
  else
    Console.WriteLine("Tag is Not available in==>"+i);
}

它正在发挥作用。但是当我在另一个带有diff元素的例子中使用它时,它显示错误。 请让我知道在c#中搜索标签的任何其他有效方法。

提前致谢。

1 个答案:

答案 0 :(得分:2)

吸引所有学生。然后尝试从photo元素中检索student元素。如果它等于null,则当前学生中不存在照片:

var students = xdoc.Root.Elements("student");
int i = 1;
string format = "Tag is {0}available in {1}";

foreach(var student in students)
   Console.WriteLine(format, student.Element("photo") == null ? "not " : "",i++);

输出:

Tag is available in 1
Tag is available in 2
Tag is not available in 3

您可以编写扩展名以使代码更具可读性

public static bool HasElement(this XElement parent, XName name)
{
    return parent.Element(name) != null;
}

E.g。选择所有有照片的学生将会是

from student in xdoc.Root.Elements("student")
where student.HasElement("photo")
select student

您也可以将XPath用于同一任务

xdoc.XPathSelectElements("school/student[photo]")