В проекте, над которым я работаю, я только что закончил писать XSD для своего XML, чтобы другие инженеры могли легче работать с XML. Наряду с этим XSD пришли пространства имен XML. В моем текущем коде синтаксического анализа я использовал что-то вроде этого:
XElement element = xmlRoot.Element(XML.ELEMENT_NAME);
С XML, являющимся классом, полным констант, который используется в программе для ввода и вывода XML. Но теперь, когда используются пространства имен, это больше не работает. Очевидное, но едва элегантное, решение состоит в том, чтобы войти и сделать весь код синтаксического анализа следующим образом:
XElement element = xmlRoot.Element(XML.NAMESPACE + XML.ELEMENT_NAME);
Если подумать об этом, было бы гораздо лучше выйти и определить метод расширения, добавляемый в это пространство имен и возвращающий XElement. Эта идея привела бы к тому, что код выглядел примерно так:
XElement element = xmlRoot.GetMyElement(XML.ELEMENT_NAME);
Эти идеи - то, что я до сих пор придумывал для решения проблемы пространства имен.
По сути, мой вопрос здесь таков:
Есть ли лучший метод для анализа элементов XE с известным постоянным пространством имен? Если да, что это?
Что ж, альтернативы никто не предоставил, и я уже реализовал это в коде. Итак, я собираюсь пойти дальше и вставить это в качестве ответа, чтобы я мог закрыть это.
Я пошел дальше и использовал метод расширения, который автоматически добавлялся в пространство имен. Обратите внимание, что это работает, только если у вас есть постоянное пространство имен! В противном случае вы можете захотеть добавить еще один аргумент в свой метод расширения, просто чтобы избежать странной конкатенации пространств имен.
public static XElement
GetNamespaceElement(this XElement element, string ns, string name)
{
XNamespace n = new XNamespace();
n.NamespaceName = ns;
return element.Element(n + name);
}