2010-06-25 3 views
2

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

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" /> 

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

Спасибо.

ответ

3

Вы можете указать префикс пространства имен в то время вы называете 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; 
+0

Спасибо, Реми. Я уже реализовал это второе решение, но еще не вернулся сюда, чтобы опубликовать его. Ваше первое предложение чище, и я не знаю, почему я не пытался его начать, за исключением того, что я просто не ожидал, что он сработает. – RJCookeSE

Смежные вопросы