LINQ to XML: игнорирование регистра атрибутов

Я использую LINQ to XML для работы с файлом PackageContents.xml, созданным компанией Autodesk. Компания определила структуру этого XML-файла здесь, но без схемы XSD.

У меня проблема: эта компания нарушает его правила... Часто регистр элементов и атрибутов недействителен. Например, вместо атрибута "URL" может быть определен атрибут "Url" (другой регистр).

Но дело важно для XML (или, на английском языке):

Как и имена элементов, имена атрибутов чувствительны к регистру и должны начинаться с буквы или подчеркивания.

"URL" не равен "URL" - такой атрибут не найден.

Могу ли я решить эту проблему с помощью LINQ to XML (или другого) или не могу?

1 ответ

Решение

Хотя это правильно, что myXelement.Attribute("URL") потребуется правильный случай, ничто не мешает вам делать

var attribute = x.Attributes()
                 .SingleOrDefault(xa => 
                     string.Equals(xa.Name.LocalName, 
                                   "Url", 
                                   StringComparison.InvariantCultureIgnoreCase));

Оберните это в подходящее расширение или статический вспомогательный метод, и ваш потребляющий код не должен быть слишком плохим.

Другие вопросы по тегам