[fpc-pascal] DOM and namespaces with prefix

Torsten Bonde Christiansen tc at epidata.info
Tue Jun 19 15:11:13 CEST 2012

Hi all.

I am working on implementing a lite export routine from our program to 
the DDI XML format: 

A convinient way of working with the DDI format is to prefix elements 
using common set of prefix'es, but having spent most
of the day trying to I can only make it work with a single prefix.

program project1;
{$mode objfpc}{$H+}

   Classes, DOM, XMLWrite;

   XMLDoc: TXMLDocument;
   DDIInstance: TDOMElement;
   Attr: TDOMAttr;

   XMLDoc := TXMLDocument.Create;
   DDIInstance := XMLDoc.CreateElementNS('ddi:instance:3_0', 'DDIInstance');
   DDIInstance.Prefix := 'ns1';        // this gives me: 
<ns1:DDIInstance xmlns:ns1="ddi:instance:3_0"> which is great.

   // now I would like to expand with eg: xmlns:a="ddi:archive:3_0"
   Attr := XMLDoc.CreateAttributeNS('ddi:archive:3_0', 'huh');
   Attr.Prefix := 'a';
   DDIInstance.SetAttributeNode(Attr);   // but this gives: 
<ns1:DDIInstance xmlns:ns1="ddi:instance:3_0" xmlns:a="ddi:archive:3_0" 


   WriteXMLFile(XMLDOc, '/tmp/test.xml');

How can i get the "xmlns:a="ddi:archive:3_0" without the additional 
attribute AND maintain the namespace + prefix in later elements?

Kind regards,
Torsten Bonde Christiansen.

More information about the fpc-pascal mailing list