检查 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# 的属性?的主要内容,如果未能解决你的问题,请参考以下文章

C# Linq 计算具有特定值的 XML 段

使用 LINQ - C# 在 xml 文件中的特定节点下方添加新元素

用于 XML 的 C# LINQ Left Outer Join 无法正常工作

有没有更快的方法来检查 LINQ to XML 中的 XML 元素?

具有复杂过滤 LINQ to XML c# 的查询

在 C# 中使用 LINQ-To-XML 解析具有多个列表和类对象的 XML 数据