Даже с LINQ-to-XML вы должны делать запросы по name , поэтому я не уверен, почему отсутствие какого-либо конкретного тега должно «перемешивать перечисление» - просто; у вас могут быть нулевые значения, т. е.
var customer = node.Element("Foo");
// now test for null ;p
Вы не можете привести произвольный XNode
к XDocument
, но если вы уверены, что это элемент , приведение к XElement
должно обеспечить то, что вам нужно.
Также обратите внимание, что когда значение узлов может отсутствовать, вам может быть проще всего использовать преобразование операторов:
var auditDate = (DateTime?)e.Element("AuditDate");
если <AuditDate>
не существует, будет возвращено пустое Nullable<DateTime>
- тот же подход работает для большинства распространенных типов значений или для строк, которые просто преобразуются в string
.