使用Linq C#使用特定属性查询特定xml标记的值

时间:2013-02-10 14:14:29

标签: c# xml linq

我有这个xml文件,我试图从中获取一些标签 这就是......我想提取具有特定值的特定属性的标签......

这是一个例子

<root>
    <input class="x">Data</input>
    <input>Data2</input>
    <input name="y">Data3</input>
    <input class="z">Data4</input>
</root>

我想获得所有具有“class”属性的“input”标签。

List<XElement> selected = xmlDoc.Descendants("input").Where(t => t.Element("input").Attributes("class") != null).ToList();

但是它在lambda表达式中给了我一个空引用异常...你能帮帮我吗?

2 个答案:

答案 0 :(得分:0)

你会想要这个

List<XElement> selected = xmlDoc.Descendants("input").Where(t => t.Attribute("class") != null).ToList();

您试图查看输入节点内的输入节点。

答案 1 :(得分:0)

t.Attributes("class")永远不会返回null。请改用t.Attribute("class")(或.Where(t => t.Attributes("class").Any()))。

您不需要t.Element("input")

var selected = xmlDoc.Descendants("input")
                      .Where(t => t.Attribute("class") != null)
                      .ToList();

或只是

var selected = xmlDoc.XPathSelectElements("//input[@class]").ToList();

在XPATH的帮助下