在创建XDocument之前检查XML

时间:2012-10-21 16:34:07

标签: c# xml linq-to-xml

我通过Xdocument加载xml:

XDocument document = new XDocument();
                document = XDocument.Load(filepath);
                var list = document.Element("Items").Elements("Item").Select(Items.FromXElement).ToList();

如果Xml文件不包含元素“Item”或“Items”,则会出现NullReference异常。 在此异常之前,如何检查我的xml文件中的元素内容?

2 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点:

选项1:XPath

using System.Xml.XPath;

var list = document.XPathSelectElements("/Items/Item").Select(Items.FromXElement).ToList();

选项2:帮助方法

static class XExtensions
{
    public static XElement ElementOrEmpty(this XContainer container, XName name)
    {
        return container.Element(name) ?? new XElement(name);
    }
}

var list = document.ElementOrEmpty("Items").Elements("Item").Select(Items.FromXElement).ToList();

选项3:Validate your XML document against a schema

答案 1 :(得分:1)

尝试使用XPath。通过LinqPad运行:

XDocument doc = XDocument.Parse("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<Items>" +
  "<Item>" +
  "</Item>" +
"</Items>");

var items = doc.Root.XPathSelectElements(@"//Items/Item");

items.Dump();

如果不存在Items,将返回空的IEnumerable。