2010-03-24 118 views
22

如何检查并查看节点实际上是否具有某个属性?我有一个XML文件,其中包含几个看起来像这样的节点:检查XML节点是否具有Linq C#的属性?

<Field From="OldString" To="NewString" /> 

到目前为止这么好。问题是,这种结构将要被改变,一些节点将是这样的:

<Field From="OldString" To="NewString" PrefixValue="OptionalAttribute" /> 

现在,当PrefixValue存在我应该预先考虑在该属性为一个字符串值,而且并不是很困难,但是当我尝试查看节点的PrefixValue属性是否存在时,我遇到了一些问题。在不存在PrefixValue的情况下,节点中根本不存在属性PrefixValue。我将如何去查看Linq表达式是否存在该属性?

回答

47

嗯,这取决于你想要做什么。如果你想在投影中使用它,你可以使用:

(string) element.Attribute("PrefixValue") 

如果属性缺失,这将返回null,这很有用。

如果你想让它在where子句中,使用类似:

where element.Attribute("PrefixValue") != null 
+0

基本上,我只想要返回一个空值,如果该属性完全缺失作为第一步。谢谢! – Henric 2010-03-24 10:30:01

+1

我得到的错误XNode doesnot有属性属性或方法... – Ziggler 2016-04-12 17:16:26

+0

@Ziggler:这表明你正在使用'XNode'而不是'XElement'。我们看不到任何代码,但基本上你想使用'XElement' ... – 2016-04-12 17:20:39

3
if ((string)level1.Attribute("customer_code") != null) 
{ 
    newBox.customer_code = (string)level1.Attribute("customer_code").Value; 
} 

上面的代码应该采取如果属性存在检查的护理。

没有if语句,你会得到一个没有设置为实例错误的对象。