我想用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#中搜索标签的任何其他有效方法。
提前致谢。
答案 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]")