Create a simple DOM and having it serialize to:

 <?xml version="1.0" ?>
 <root>
     <element>
         Some text here
     </element>
 </root>

 
/* ARM assembly AARCH64 Raspberry PI 3B */
/* program createXml64.s   */
/* install package   libxml++2.6-dev    */
/* link with gcc option -I/usr/include/libxml2 -lxml2    */
 
/*******************************************/
/* Constantes file                         */
/*******************************************/
/* for this file see task include a file in language AArch64 assembly*/
.include "../includeConstantesARM64.inc"
 
/*********************************/
/* Initialized data              */
/*********************************/
.data
szMessEndpgm:      .asciz "Normal end of program.\n" 
szFileName:        .asciz "file1.xml" 
szFileMode:        .asciz "w"
szMessError:       .asciz "Error detected !!!!. \n"
 
szVersDoc:         .asciz "1.0"
szLibRoot:         .asciz "root"
szLibElement:      .asciz "element"
szText:            .asciz "some text here"
szCarriageReturn:  .asciz "\n"
/*********************************/
/* UnInitialized data            */
/*********************************/
.bss 
.align 4
 
/*********************************/
/*  code section                 */
/*********************************/
.text
.global main 
main:                                     // entry of program 
    ldr x0,qAdrszVersDoc
    bl xmlNewDoc                          // create doc
    mov x19,x0                            // doc address
    mov x0,#0
    ldr x1,qAdrszLibRoot
    bl xmlNewNode                         // create root node
    cbz x0,99f
    mov x20,x0                            // node root address
    mov x0,x19
    mov x1,x20
    bl xmlDocSetRootElement
    mov x0,#0
    ldr x1,qAdrszLibElement
    bl xmlNewNode                         // create element node
    mov x21,x0                             // node element address
    ldr x0,qAdrszText
    bl xmlNewText                         // create text
    mov x22,x0                             // text address
    mov x0,x21                             // node element address
    mov x1,x22                             // text address
    bl xmlAddChild                        // add text to element node
    mov x0,x20                             // node root address
    mov x1,x21                             // node element address
    bl xmlAddChild                        // add node elemeny to root node
    ldr x0,qAdrszFileName
    ldr x1,qAdrszFileMode
    bl fopen                              // file open
    cmp x0,#0
    blt 99f
    mov x23,x0                             // File descriptor
    mov x1,x19                             // doc
    mov x2,x20                             // root
    bl xmlElemDump                        // write xml file
    cmp x0,#0
    blt 99f
    mov x0,x23
    bl fclose                             // file close
    mov x0,x19
    bl xmlFreeDoc
    bl xmlCleanupParser
    ldr x0,qAdrszMessEndpgm
    bl affichageMess
    b 100f
99:                                        // error
    ldr x0,qAdrszMessError
    bl affichageMess       
100:                                       // standard end of the program 
    mov x0,0                               // return code
    mov x8,EXIT                            // request to exit program
    svc 0                                  // perform the system call
 
qAdrszMessError:          .quad szMessError
qAdrszMessEndpgm:         .quad szMessEndpgm
qAdrszVersDoc:            .quad szVersDoc
qAdrszLibRoot:            .quad szLibRoot
qAdrszLibElement:         .quad szLibElement
qAdrszText:               .quad szText
qAdrszFileName:           .quad szFileName
qAdrszFileMode:           .quad szFileMode
qAdrszCarriageReturn:     .quad szCarriageReturn
/********************************************************/
/*        File Include fonctions                        */
/********************************************************/
/* for this file see task include a file in language AArch64 assembly */
.include "../includeARM64.inc"
 