powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как работать с XmlNamespaceManager если не знаю Prefix ?
5 сообщений из 5, страница 1 из 1
Как работать с XmlNamespaceManager если не знаю Prefix ?
    #38624856
Pruvetik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет.

Вот простой пример кода.
Код: c#
1.
2.
3.
4.
5.
XmlNamespaceManager nsManager = new XmlNamespaceManager(myDoc.NameTable);
nsManager.AddNamespace("s", "http://www.w3.org/2003/05/soap-envelope");
nsManager.AddNamespace("a", "http://www.w3.org/2005/08/addressing");

var ToNode = myDoc.SelectSingleNode("//s:Header/a:To", nsManager);



Как быть, если я не знаю сокращенного префикса ("s", "a" и т.д.)?
Я обрабатываю XML файл, которые приходят со стороны, от других людей. Кто их знает, какой они префикс затолкают.

Очевидно знаю лишь, что тег Header находится в пространстве имен http://www.w3.org/2003/05/soap-envelope.

Как мне прочитать тэг ?

Пробовал конечно по тупому:
Код: c#
1.
SelectSingleNode("//http://www.w3.org/2003/05/soap-envelope:Header/http://www.w3.org/2005/08/addressing:To", nsManager);



Но словил рантайм ошибку, что не допустимое имя.
...
Рейтинг: 0 / 0
Как работать с XmlNamespaceManager если не знаю Prefix ?
    #38624875
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pruvetik,

Назначить самому любой:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var xd = new XmlDocument();
xd.LoadXml(@"
<root xmlns:ns='urn:someurn'>
<ns:item/>
</root>
");
var xnm = new XmlNamespaceManager(xd.NameTable);
xnm.AddNamespace("blablabla", "urn:someurn");
var item = xd.SelectSingleNode("//blablabla:item", xnm);
Console.WriteLine(item);
...
Рейтинг: 0 / 0
Как работать с XmlNamespaceManager если не знаю Prefix ?
    #38624891
Pruvetik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры Павловны,

Спасибо большое. Действительно так работает.

Код: c#
1.
2.
nsManager.AddNamespace("jjjjj", "http://www.w3.org/2005/08/addressing");
var ToNode = myDoc.SelectSingleNode("//s:Header/jjjjj:To", nsManager);



Причем возвращает корректный нод, с префиксом "a" !

Логично конечно сработало, как и должно работать для упрощения кодирования !
Просто не ожидал, что встроен именно настолько удобный сервис. Всегда считал (и не пробовал иначе...), что нужно дословно задавать пространство имен.
...
Рейтинг: 0 / 0
Как работать с XmlNamespaceManager если не знаю Prefix ?
    #38624929
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pruvetikчто нужно дословно задавать пространство имен
Так и есть. Нужно дословно задавать. Но "a", "s", "blablabla" - это псевдонимы. Их можно назначать самому. И кроме того, бывают такие случаи, когда эти псевдонимы НУЖНО делать дословными. Но там сильно навороченный XML, ваш - не такой.
...
Рейтинг: 0 / 0
Как работать с XmlNamespaceManager если не знаю Prefix ?
    #38624977
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pruvetik,

если это настоящий SOAP, не лучше ли сгенерировать в Студии классы для его приёма? И не разбирать xml вручную.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как работать с XmlNamespaceManager если не знаю Prefix ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]