Как установить префикс элемента документа в 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;