WXML Library¶
While in theory it is a fairly simply task to write XML in any language, in practice it’s not quite that easy. Balancing tags that are opened at one end of a 2000 line source file and closed at the other or even opened and closed in different source files, is an unnecessary memory exercise, and balancing them in the right order a pain. More importantly, you’ll probably only spot your mistake when you try to process the file, and given that XML is case sensitive it’s a pretty easy to make a mistake. Add to this the fact that it is extremely difficult to correctly indent an XML document whose structure is as dynamic as that of the underlying program (just using write statements). Hence the creation of a library for handling the more tedious or tricky elements of creating a XML document. We also added functionality to check the well-formedness of all XML.
Routines¶
General routines¶
xml_OpenFile - Mandatory Initialization routine
xml_Close - Mandatory finalization routine, closes channels, etc
str <#str> - utility to convert reals and integers to character strings
XML routines¶
xml_NewElement <#start> - writes an xml start tag
xml_AddAttribute <#attr> - adds an attribute to a tag
xml_AddPcdata <#text> - adds text to an xml element
xml_AddArray <#array> - dumps the contents of an array as pcdata
xml_EndElement <#end> - writes an xml end tag
Subroutine Guide
xml_OpenFile(filename, ind, xf)
argument
role
type
optional
default
filename
xml filename
character(len=*)
no
ind
controls indentation of output
logical
yes
.true.
xf
xml filename
type(xmlf_t)
no
xml_Close(filehandle) <>
argument
role
type
optional
default
xf
xml filehandle
type(xmlf_t)
no
function str(value, format) <>
argument
role
type
optional
default
value
value to convert to string
real*8, real*4, integer, logical
no
format
format for reals
character(len=*)
yes
g22.12
xml_NewElement(xf, name) <>
argument
role
type
optional
default
xf
xml filehandle
type(xmlf_t)
no
name
name of tag to add
character(len=*)
no
xml_AddAttribute(xf, attname, value) <>
argument
role
type
optional
default
xf
xml filehandle
type(xmlf_t)
no
attname
attribute name
character(len=*)
no
value
attribute value
character(len=*) (convert using str())
no
xml_AddPcdata(xf, pcdata) <>
argument
role
type
optional
default
xf
xml filehandle
type(xmlf_t)
no
pcdata
string to add
character(len=*) (convert numbers using str())
no
xml_AddArray(xf, a, format) <>
argument
role
type
optional
default
xf
xml filehandle
type(xmlf_t)
no
a
array (:)
integer, real, double
no
format
format
character(len=*)
yes
6(i12) / 4(es20.12)
xml_EndElement(xf, name) <>
argument
role
type
optional
default
xf
xml filehandle
type(xmlf_t)
no
name
name of element to close
character(len=*)
no