Я использую VB 2008 и пытаюсь добавить атрибут xmlns="mynamespace" в корневой элемент XDocument.
XML-документ создан третьей стороной, и я загрузил его в объект VB XDocument. Как оказалось, у него нет пространств имен. Я работал над локальной копией и добавил пространство имен в текстовом редакторе, чтобы использовать XMLToSchema в VB для включения Intellisense и т. д., в соответствии с инструкциями в видеороликах Бет Масси по адресу MSDN. Теперь остальная часть кода работает. Я хочу снова открыть живые документы. Без пространства имен мои XML-литералы не разрешаются.
Я безуспешно пытался добавить свойство XMLNS к корневому тегу, используя несколько методов, и самым близким из них были следующие три примера кода.
Dim myNS As XNamespace = "urn:nbf:namespacename"
myXML.Element("nameofrootelement").Add(myNS)
^^^^ Пространство имен было добавлено как значение корневого элемента, а не как атрибут.
XML.Root.Add(New XAttribute("xmlns", "name"))
^^^^ Сгенерирована ошибка: Исключение во время выполнения: System.Xml.XmlException - префикс '' не может быть переопределен с '' на 'имя' в одном и том же теге начального элемента.
но
XML.Root.Add(New XAttribute("test", "name"))
^^^^ работает корректно. Предположительно, ему не нравится, что я вручную пытаюсь установить зарезервированный атрибут? Это пространство имен кажется слишком сложным из-за некоторых поисков в Google, которые я сделал.
Как обойти эту проблему? :D
Спасибо!
Обновить
Спасибо Энтони.
Я думаю, мне нужно лучше понять пространства имен.
Я думал .ToString его, затем изменить, а затем .Parse тоже, но мне нужно было лучшее решение, чтобы оно помогло мне немного лучше понять его! Однако я пробовал это, и, как вы правильно заметили, это влияет и на всех потомков, поэтому оно все еще ломается.
Я буду работать с несколькими XML-потоками, созданными разными третьими сторонами, и я думаю, что для простоты я полностью упущу пространство имен!
Моя собственная функция синтаксического анализа переписывает каналы третьих сторон в единый документ, который затем обрабатывается другой процедурой. Я смогу добавить ns к этому промежуточному фрагменту XML, который поможет при кодировании вторичной функции.
Спасибо!