powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / XMLDocument, ссылка на необъявленный префикс пространства имен
5 сообщений из 5, страница 1 из 1
XMLDocument, ссылка на необъявленный префикс пространства имен
    #40093571
genok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не победил я корявый импорт WSDL и решил делать XML вручную с помощью IXMLDocument
затык на следующем: нужно получить строку вот такого вида:

Код: xml
1.
 <caseDto xmlns:d4p1="http://schemas.datacontract.org/2004/07/N3.EMK.Dto.Case" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" i:type="d4p1:CaseAmb"/>



документ формирую так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  
    XML:=NewXMLDocument;
    XML.Options := XML.Options + [doNodeAutoIndent];
    XML.Encoding:='UTF-8';

    with XML.AddChild('s:Envelope', 'http://schemas.xmlsoap.org/soap/envelope/') do
      With AddChild('Body').AddChild('AddCase', 'http://tempuri.org/') do
          caseDto:=AddChild('caseDto');

    caseDto.DeclareNamespace('d4p1', 'http://schemas.datacontract.org/2004/07/N3.EMK.Dto.Case');
    caseDto.DeclareNamespace('i', 'http://www.w3.org/2001/XMLSchema-instance');
//    caseDto.SetAttributeNS('xmlns:d4p1', '', 'http://schemas.datacontract.org/2004/07/N3.EMK.Dto.Case');
//    caseDto.SetAttributeNS('xmlns:i', '', 'http://www.w3.org/2001/XMLSchema-instance');
//    caseDto.SetAttributeNS('i:type', '', 'd4p1:CaseAmb');
    caseDto.SetAttributeNS('type', '', 'd4p1:CaseAmb');



получается почти как нужно:
Код: xml
1.
 <caseDto xmlns:d4p1="http://schemas.datacontract.org/2004/07/N3.EMK.Dto.Case" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" type="d4p1:CaseAmb"/>



но если сделать caseDto.SetAttributeNS('i:type', '', 'd4p1:CaseAmb') \
то в момент формирования документа получаю ошибку ссылка на необъявленный префикс пространства имен i
где накосячил, чего не вижу?
...
Рейтинг: 0 / 0
XMLDocument, ссылка на необъявленный префикс пространства имен
    #40093581
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы наугад программируете? Не пробовали читать документацию?
Код: pascal
1.
caseDto.SetAttributeNS('http://www.w3.org/2001/XMLSchema-instance', 'i:type', 'd4p1:CaseAmb');
...
Рейтинг: 0 / 0
XMLDocument, ссылка на необъявленный префикс пространства имен
    #40093587
genok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Вы наугад программируете? Не пробовали читать документацию?
Код: pascal
1.
caseDto.SetAttributeNS('http://www.w3.org/2001/XMLSchema-instance', 'i:type', 'd4p1:CaseAmb');



спасибо, вот так получилось:
Код: pascal
1.
caseDto.SetAttributeNS('i:type', 'http://www.w3.org/2001/XMLSchema-instance', 'd4p1:CaseAmb');



обычно смотрю описания методов прям в исходниках, но вот что-то такой подход засбоил
сразу спрошу еще: как сделать чтобы дочерние строки автоматически префиксы добавляли
делаю так:
Код: pascal
1.
caseDto.ChildValues['Comment']:='тестовая запись случая';


на выходе
Код: xml
1.
<IdCaseMis>223</IdCaseMis>


а надо
Код: xml
1.
<d4p1:IdCaseMis>223</d4p1:IdCaseMis>



или руками в каждый пункт добавлять?
...
Рейтинг: 0 / 0
XMLDocument, ссылка на необъявленный префикс пространства имен
    #40093598
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
genok
или руками в каждый пункт добавлять?
Нужно при вызове CreateNode/AddChild указывать нужный неймспейс.
...
Рейтинг: 0 / 0
XMLDocument, ссылка на необъявленный префикс пространства имен
    #40093619
genok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
genok
или руками в каждый пункт добавлять?
Нужно при вызове CreateNode/AddChild указывать нужный неймспейс.


но если я так делаю, то строка выходная меняет свой вид и не опознается сервисом

сейчас с вашей помощью код выглядит так:

Код: pascal
1.
2.
3.
4.
    caseDto:=AddChild('caseDto');
    caseDto.DeclareNamespace('d4p1', 'http://schemas.datacontract.org/2004/07/N3.EMK.Dto.Case');
    caseDto.SetAttributeNS('i:type', 'http://www.w3.org/2001/XMLSchema-instance', 'd4p1:CaseAmb');
    caseDto.ChildValues['d4p1:HistoryNumber']:='111'; 



на выходе именно то, что нужно, сервис это слава Богу принимает и ошибок нет
Код: xml
1.
2.
3.
      
     <caseDto xmlns:d4p1="http://schemas.datacontract.org/2004/07/N3.EMK.Dto.Case" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" i:type="d4p1:CaseAmb">
        <d4p1:HistoryNumber>111</d4p1:HistoryNumber>


в принципе, руками несложно префикс добавить, ибо любые испробованные мной варианты добавления НС при создании ноды меняют её описание и сервис такое не опознает уже.
Огромное спасибо вам за помощь!!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / XMLDocument, ссылка на необъявленный префикс пространства имен
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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