我有一个像xml这样的文件
<Root>
<Child Name="A" />
</Root>
Run Code Online (Sandbox Code Playgroud)
我需要检查"Child"元素是否具有"val"属性.如果是,如果该值大于零,则需要将布尔变量的值更改为true;
现在我正在使用
bool bVal=false
bVal=XDocument.Load(Application.StartupPath+"\\foo.xml")
.Descendants("Child")
.Select(TEMP => (Int32)TEMP.Attribute("val")).ToList()[0]>0?true:false;
Run Code Online (Sandbox Code Playgroud)
如果xml是这样的话,这个表达式工作正常
<Root>
<Child Name="A" val ="2" />
</Root>
Run Code Online (Sandbox Code Playgroud)
但如果xml不包含"val"属性,则抛出异常.
如何修改上面的表达式(Query)来检查是否存在"val"属性.
在这种情况下,我将查询重写为:
bool bVal = XDocument.Load(Application.StartupPath+"\\foo.xml")
.Descendants("Child")
.Select(x => (int?) x.Attribute("val"))
.FirstOrDefault(x => x != null) > 0;
Run Code Online (Sandbox Code Playgroud)
这使用三个功能:
XAttribute为将导致null值int?intFirstOrDefault而不是ToList()[0]更高效,即使没有值也可以工作>运算符将返回False如果要检查是否有任何正面的价值观,那就更简单了:
bool bVal = XDocument.Load(Application.StartupPath+"\\foo.xml")
.Descendants("Child")
.Select(x => (int?) x.Attribute("val"))
.Any(x => x > 0);
Run Code Online (Sandbox Code Playgroud)