如何在Delphi中设置文档元素的前缀

时间:2010-06-25 15:32:42

标签: xml delphi namespaces

使用Delphi 2009,我试图获取一个声明的名称空间前缀,以应用于我正在创建的IXMLDocument中的document元素。创建文档元素后,我可以声明带有前缀的命名空间,但它不会应用于文档元素,我似乎无法更改文档元素的前缀。如果我使用doc.CreateElement(nodename,namespaceURI)来创建文档元素,它会将指定的URI添加为doc的默认命名空间,这不是我想要做的。我正在创建的这个文档将被添加到另一个已经具有默认命名空间的文档中。

  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 个答案:

答案 0 :(得分: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;