Даниэль, xmlns=""
в элементе <DataRows>
означает, что для пространства имен по умолчанию для <DataRows>
и всех потомков нет пространства имен.
Другими словами, если бы xmlns=""
не было, все дерево XML было бы в пространстве имен http://www.mynamespace.com
. (Поскольку объявления пространства имен наследуются, пока не будут переопределены.) И это, вероятно, то, что вы хотели. Но SQL Server считает, что вы хотели, чтобы в этом пространстве имен был только элемент <Names>
. Таким образом, это «полезное» удаление пространства имен по умолчанию для всех дочерних элементов.
Тогда решение состоит в том, чтобы сообщить SQL Server, что все элементы, а не только <Names>
, должны находиться в пространстве имен http://www.mynamespace.com
.
(Если вы спросите меня, как это сделать, ответ таков: я плохо знаю особенности SQL Server XML. Но, возможно, прояснение того, что происходит и что должно произойти, поможет вам понять, как это сделать.)
Обновление в свете недавно опубликованного запроса и вывода:
@ Даниэль, теперь ваш вывод технически верен. Все выходные элементы находятся в пространстве имен http://www.mynamespace.com
. Объявления xmlns="http://www.mynamespace.com"
для элементов <Row>
являются избыточными ... они не изменяют пространство имен любого элемента.
Вам могут не понравиться эти дополнительные объявления, но они не должны иметь никакого значения для любых последующих XML-инструментов.
Если вы хотите удалить их, и если вы не можете сделать это путем настройки SQL-запроса, вы можете запустить полученный XML-файл через таблицу стилей XSLT. Я полагаю, что даже преобразование идентичности , вероятно, избавит от избыточных объявлений пространства имен.