Элегантное решение для синтаксического анализа элементов XE в пространстве имен

В проекте, над которым я работаю, я только что закончил писать 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 с известным постоянным пространством имен? Если да, что это?

1
задан fire.eagle 16 August 2010 в 15:43
поделиться

1 ответ

Что ж, альтернативы никто не предоставил, и я уже реализовал это в коде. Итак, я собираюсь пойти дальше и вставить это в качестве ответа, чтобы я мог закрыть это.

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

      public static XElement
      GetNamespaceElement(this XElement element, string ns, string name)
      {
          XNamespace n = new XNamespace();
          n.NamespaceName = ns;
          return element.Element(n + name);
      }
2
ответ дан 2 September 2019 в 22:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: