检查 XML 节点是不是具有 Linq C# 的属性?
Posted
技术标签:
【中文标题】检查 XML 节点是不是具有 Linq C# 的属性?【英文标题】:Check if XML-node has attribute with Linq C#?检查 XML 节点是否具有 Linq C# 的属性? 【发布时间】:2011-01-31 04:46:25 【问题描述】:如何检查节点是否确实具有某个属性?我有一个包含多个节点的 XML 文件,如下所示:
<Field From="OldString" To="NewString" />
到目前为止一切顺利。问题是这个结构即将更改为某些节点将如下所示:
<Field From="OldString" To="NewString" PrefixValue="OptionalAttribute" />
现在,当 PrefixValue 存在时,我应该将该属性中的值添加到字符串中,这并不是很困难,但是当我尝试查看 PrefixValue 属性是否存在于一切为了一个节点。在不存在 PrefixValue 的情况下,属性 PrefixValue 将根本不存在于节点中。我将如何使用 Linq 表达式检查该属性是否存在?
【问题讨论】:
【参考方案1】:嗯,这取决于你想做什么。如果你想在投影中使用它,你可以使用:
(string) element.Attribute("PrefixValue")
如果缺少该属性,它将返回 null,这很有用。
如果您想在 where 子句中使用它,请使用以下内容:
where element.Attribute("PrefixValue") != null
【讨论】:
本质上,我只想在第一步完全丢失属性时返回一个空值。谢谢! @Ziggler:这表明您使用的是XNode
,而不是XElement
。我们看不到您的任何代码,但基本上您想使用XElement
...
如果是 XmlDocument,我收到错误 XNode 没有 Attribute 属性或方法...如果是 XDocument,我有 XElement 的 Attribute 方法,但没有字符串输入。
@Ziggler:恐怕我不明白你的意思,但听起来你应该问一个新问题,向我们展示你的代码。
我的问题是,如果我们在上面的答案中将元素作为 XElement... element.Attribute("PrefixValue") 显示错误,因为 Attribute 方法要求的是 XName 而不是字符串。【参考方案2】:
if ((string)level1.Attribute("customer_code") != null)
newBox.customer_code = (string)level1.Attribute("customer_code").Value;
上面的代码应该负责检查属性是否存在。
如果没有 if 语句,您将得到一个未设置为实例的对象错误。
【讨论】:
以上是关于检查 XML 节点是不是具有 Linq C# 的属性?的主要内容,如果未能解决你的问题,请参考以下文章
使用 LINQ - C# 在 xml 文件中的特定节点下方添加新元素
用于 XML 的 C# LINQ Left Outer Join 无法正常工作