这是我的 xml,
<root>
<A>
<B id="ABC">one
</B>
<B id="ZYZ">two
</B>
<B id="QWE">three
</B>
<B>four
</B>
</A>
</root>
Run Code Online (Sandbox Code Playgroud)
使用以下C#代码仅获取节点<B id="QWE">three</B>,
var x = xdoc.Descendants("B").Where(ele => ele.Attribute("id").Value.Equals("QWE"));
Run Code Online (Sandbox Code Playgroud)
但变量x始终为空,任何帮助表示赞赏!
在您的 xml 示例中,并非所有B节点都具有id属性。Attribute("id")将为该节点返回 null,当您访问Valuenull 时,您会得到一个NullReferenceException.
使用下面的代码来避免该错误:
var x = xdoc.Descendants("B")
.Where(ele => (string)ele.Attribute("id") == "QWE");
Run Code Online (Sandbox Code Playgroud)
Attribute方法返回XElement. 当您将其转换为 时string,它会采用该元素的字符串表示形式,在我们的例子中,这将是属性的值(您可以在 msdn 上查看有关将 XElement 转换为字符串的更多详细信息)。现在,当Attribute返回 null 时,将其转换为字符串将给出 null。==对于 null 和字面量,运算符将始终返回 false "QWE",不会抛出异常。
如果由于某种原因,您不想转换XElement为string,则可以使用三元运算符来查看节点是否id存在属性ele(代码很快就会变得不那么可读)。
var x = xdoc.Descendants("B")
.Where(ele => (ele.Attribute("id") != null ? ele.Attribute("id").Value : null) == "QWE");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5312 次 |
| 最近记录: |