Initializing help system before first use

Creating and saving XML documents


Type: Programming
Rating: 2 (easy-medium)
Description:
  • Creation of an XML document
  • Adding element nodes
  • Specifying node attributes
  • Recursive display of the subtree under a given XML node
File(s): xmltest.mos


xmltest.mos
(!******************************************************
   Mosel Example Problems
   ======================

   file xmltest.mos
   ````````````````
   A simple model using 'mmxml'

  (c) 2012 Fair Isaac Corporation
      author: Y. Colombani, August 2012
*******************************************************!)

model xmltest
uses 'mmxml'

declarations
 doc:xmldoc               ! A document
 root,el,cnt:integer      ! References to nodes
 lst:list of integer
end-declarations


forward procedure showtree(doc:xmldoc,n:integer,indent:string)

root:=addnode(doc,0,XML_ELT,"myroot")       ! Create the root node: "myroot"
el:=addnode(doc,root,XML_LASTCHILD,XML_ELT,"an_element")! Add a node to "myroot"
cnt:=addnode(doc,el,XML_TXT,"content of an element")    ! Set its content...
setattr(doc,el,"myattr",10)                             ! ... and attributes
setattr(doc,el,"someattr","value")

cnt:=addnode(doc,cnt,XML_NEXT,XML_ELT,"subelt")         ! Add a node to 'cnt'
cnt:=addnode(doc,cnt,XML_TXT)                           ! Set its content...
setvalue(doc,cnt,false);

                           ! Add another node to "myroot" as a successor of 'el'
el:=addnode(doc,el,XML_NEXT,XML_ELT,"another_element") 
cnt:=addnode(doc,el,XML_TXT)                            ! Set its content...
setvalue(doc,cnt,12.3)

el:=addnode(doc,root,XML_ELT,"empty_element")  ! Add another node to "myroot"
setattr(doc,el,"myattr",1.3)                   ! with an attribute

                                               ! Add further nodes to "myroot"
el:=addnode(doc,root,XML_LASTCHILD,XML_ELT,"an_element","some content")
el:=addnode(doc,root,"an_element",el>0)
el:=addnode(doc,root,"an_element",1275)
el:=addnode(doc,root,"an_element",0.5)
el:=addnode(doc,root,"an_element","blabla")

! Print the document
writeln("****** Output from the 'save' routine **********")
save(doc,"")

! Save it to a file
save(doc,"mydoc.xml")

! Clear the document
reset(doc)

! Load the document from a file
load(doc,"mydoc.xml")

! Display it using a procedure
writeln
writeln("****** Output from the 'showtree' Mosel procedure **********")
showtree(doc,getnode(doc,"myroot"),"")
writeln

! Get all subnodes of 'myroot' named 'an_element'
getnodes(doc,'/myroot/an_element',lst)
writeln("number of nodes named 'an_element':",lst.size)

!---------------------------------------------------------
! **** Display a tree ****

procedure showtree(doc:xmldoc,n:integer,indent:string)
 declarations
  l:list of integer
 end-declarations

 case gettype(doc,n) of
  XML_ELT:
	do
  	 write(indent,"<",getname(doc,n))
	 getnodes(doc,n,"attribute::*",l)
	 forall(m in l)
	  showtree(doc,m,"")
	 getnodes(doc,n,"node()",l)
	 if l.size=0 then
	  writeln("/>")
	 else
	  writeln(">")
	  forall(m in l)
	   showtree(doc,m,indent+" ")
	  writeln(indent,"</",getname(doc,n),">")
	 end-if
	end-do
  XML_TXT: writeln(indent,getvalue(doc,n))
  XML_CDATA: writeln(indent,"<![CDATA[",getvalue(doc,n),"]]>")
  XML_COM: writeln(indent,"<!--",getvalue(doc,n),"-->")
  XML_DATA: writeln(indent,getvalue(doc,n))
  XML_PINST:writeln(indent,"<?",getname(doc,n)," ",getvalue(doc,n),"?>")
  XML_ATTR:write(" ",getname(doc,n),'="',getvalue(doc,n),'"')
 end-case
end-procedure

end-model

© 2001-2020 Fair Isaac Corporation. All rights reserved. This documentation is the property of Fair Isaac Corporation (“FICO”). Receipt or possession of this documentation does not convey rights to disclose, reproduce, make derivative works, use, or allow others to use it except solely for internal evaluation purposes to determine whether to purchase a license to the software described in this documentation, or as otherwise set forth in a written software license agreement between you and FICO (or a FICO affiliate). Use of this documentation and the software described in it must conform strictly to the foregoing permitted uses, and no other use is permitted.