【问题标题】: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 表达式检查该属性是否存在?

【问题讨论】:

    标签: c# xml 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 语句,您将得到一个未设置为实例的对象错误。

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 1970-01-01
      • 2023-04-03
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      相关资源
      最近更新 更多