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

Используя Delphi 2009, я пытаюсь получить объявленный префикс пространства имен для применения к элементу документа в IXMLDocument, который я создаю. Как только элемент документа создан, я могу объявить пространство имен с префиксом, но оно не применяется к элементу документа, и я не могу изменить префикс элемента документа. Если я использую doc.CreateElement(nodename, namespaceURI) для создания элемента документа, он добавляет указанный URI в качестве пространства имен по умолчанию для документа, что я не хочу делать. Этот документ, который я создаю, будет добавлен в другой документ, который уже имел пространство имен по умолчанию.

  Result := NewXMLDocument;
  eleDoc := Result.CreateElement(TAG_IH_IMPORT, NS_HISTORIAN);
  eleDoc.DeclareNamespace(FNamespacePrefix, NS_HISTORIAN);

где TAG_IH_IMPORT и NS_HISTORIAN - строковые константы, eleDoc: IXMLNode и FNamespacePrefix: String.

Результат этого выглядит так:

<Import xmlns="uri" xmlns:h="uri" />

Я действительно хочу, чтобы это h: применялось к тегу Import. Какие-либо предложения?

Благодарю.

1 ответ

Вы можете указать префикс пространства имен во время вызова CreateElement(), то есть:

Result := NewXMLDocument;
eleDoc := Result.CreateElement(FNamespacePrefix + ':' + TAG_IH_IMPORT, NS_HISTORIAN);
eleDoc.DeclareNamespace(FNamespacePrefix, NS_HISTORIAN);
Result.DocumentElement := eleDoc;

Кроме того, вы можете создать узел временного документа, объявить префикс для его дочерних узлов, добавить к нему дочерний узел, а затем назначить его в качестве нового узла документа. Например:

Result := NewXMLDocument;
eleTemp := Result.CreateElement('temp', '');
eleTemp.DeclareNamespace(FNamespacePrefix, NS_HISTORIAN);
eleDoc := eleTemp.AddChild(TAG_IH_IMPORT, NS_HISTORIAN);
Result.DocumentElement := eleDoc;
Другие вопросы по тегам