Как построить мыльную конверт вручную с помощью txmldocument (Delphi 2006)

StackOverflow https://stackoverflow.com/questions/4667081

Вопрос

У меня уже давно эта проблема, и я не могу решить ее сами. Я тоже пытался искать Google, Bing и Stackoverflow? Неудачно...

Я пытаюсь построить заголовок мыла вручную, используя компонент TXMLDOCUMENT Delphi 2006:

... ... ... ... ... ...

Я делаю то, что я строю новый элемент под названием «Soap: Oenvelope». В этом новом элементе я создаю три атрибута под названием: «XMLNS: SOAP ',' xmlns: xsd 'и' xmlns: xsi '.

Когда я пытаюсь написать значение в любом из трех атрибутов, я получаю ошибку ниже:

Попытка изменить узел только для чтения.

Кто -нибудь знает, как выполнить эту задачу, используя txmldocument?

/Брайан

Это было полезно?

Решение

Здесь работает следующий код:

procedure WriteSoapFile;
var
  Document: IXMLDocument;
  Envelope: IXMLNode;
  Body: IXMLNode;
begin
  Document := NewXMLDocument;
  Envelope := Document.AddChild('soap:Envelope');
  Envelope.Attributes['xmlns:soap'] := 'schemas.xmlsoap.org/soap/envelope/';
  Envelope.Attributes['xmlns:xsd']  := 'w3.org/2001/XMLSchema';
  Envelope.Attributes['xmlns:xsi']  := 'w3.org/2001/XMLSchema-instance';
  Body := Envelope.AddChild('soap:Body');
  Document.SaveToFile('Test.xml');
end;

Вы должны иметь возможность использовать TXMLDocument вместо IXMLDocument, это просто компонентная обертка вокруг интерфейса.

Другие советы

Вот мое решение, он использует DeclareNamespace для объявления пространства имен:

procedure WriteSoapFile;
const
  NS_SOAP = 'schemas.xmlsoap.org/soap/envelope/';
var
  Document: IXMLDocument;
  Envelope: IXMLNode;
  Body: IXMLNode;
begin
  Document := NewXMLDocument;
  Envelope := Document.CreateElement('soap:Envelope', NS_SOAP);
  Envelope.DeclareNamespace('soap', NS_SOAP);
  Envelope.DeclareNamespace('xsd', 'w3.org/2001/XMLSchema');
  Envelope.DeclareNamespace('xsi', 'w3.org/2001/XMLSchema-instance');
  Body := Envelope.AddChild('Body');
  Document.DocumentElement := Envelope;
  Document.SaveToFile('Test.xml');
end;

На основе кода, предоставленного в Как установить префикс элемента документа в Delphi

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top