Насколько я знаю, LINQ to XML не поддерживает это. Однако я столкнулся с тем же беспорядком в проекте, над которым работал, и создал это расширение для XElement, чтобы разрешить это. Может быть, это может сработать для вас:
public static XElement ElementOrDummy(this XElement parentElement,
XName name,
bool ignoreCase)
{
XElement existingElement = null;
if (ignoreCase)
{
string sName = name.LocalName.ToLower();
foreach (var child in parentElement.Elements())
{
if (child.Name.LocalName.ToLower() == sName)
{
existingElement = child;
break;
}
}
}
else
existingElement = parentElement.Element(name);
if (existingElement == null)
existingElement = new XElement(name, string.Empty);
return existingElement;
}
По сути, он просто проверяет, существует ли элемент, а если нет, возвращает элемент с тем же именем и пустым значением.