1

我正在尝试删除所有具有不以特定文本开头的属性值的元素

感谢 Jon Skeet,我得到了第一部分,但是有些元素不包含此属性,因此我收到NullReferenceExpection消息:“对象引用未设置为对象的实例”

我添加了一个额外的空值检查,但它仍然没有任何想法?

elements =(from el in xmlFile.Root.Elements(elementName)
where ( !el.Attribute(attributeName).Value.Equals(DBNull.Value)
&& !el.Attribute(attributeName).Value.StartsWith(searchBeforeStar))
select el);
4

2 回答 2

3

调用属性Equalsnull触发异常。没有必要(事实上,这是不正确的)将XAttribute的值与进行比较DBNull,因为 LINQ2XML 使用“普通”null来表示缺失的属性。

试试这个:

elements =(from el in xmlFile.Root.Elements(elementName) where (
    el.Attribute(attributeName) != null &&
    el.Attribute(attributeName).Value != null && 
    !el.Attribute(attributeName).Value.StartsWith(searchBeforeStar)
)select el);
于 2012-07-25T12:32:57.717 回答
2

您必须在测试之前测试您的节点是否包含该属性。

添加el.Attribute(attributeName) != null

elements =(from el in xmlFile.Root.Elements(elementName) 
           where ( el.Attribute(attributeName) != null
                && !el.Attribute(attributeName).Value.Equals(DBNull.Value) 
                && !el.Attribute(attributeName).Value.StartsWith(searchBeforeStar))
           select el);
于 2012-07-25T12:34:34.063 回答