/usr/share/lifelines/xmlize.ll is in lifelines-reports 3.0.61-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141  | /*
 * @progname       xmlize2.ll
 * @version        2.2
 * @author         Rafal T. Prinke
 * @category       
 * @output         XML
 * @description
         This report converts all LifeLines records
         to XML tagged file, with <LLGEDCOM> as
         the root element.
         It is now more consistent with Mike Kay's GedML.
         References are all empty tags with IDREF attribute.
         The NAME element contains one S element - for
         surname (ie. it is a reserved tag and cannot be
         used elsewhere).
         I am leaving specific tags for vital events
         rather than converting them to attributes
         of generic EVEN tags as Mike does in GedML.
         The CONT tag is replaced with an empty <P/> tag
         to indicate a new paragraph and the CONC tag
         is replaced with a space to assure continuity
         of a paragraph.
   xmlize2.ll - v. 1.1 Rafal T. Prinke, 8 March 2001
                v. 2.0 - - , 28 April 2001
                v. 2.1 - - , 29 April 2001
                v. 2.2 - - , 30 June  2001 - changed REF to IDREF
*/
global(previous)
global(numery)
global(tagi)
proc main ()
{
  list(numery)
  list(tagi)
  set(previous,-1)
  "<?xml version=" qt() "1.0" qt()
/* remove the next line for Unicode encoding or
   edit for a different 8-bit encoding using one of these:
      ISO-8859-1       - ISO Latin-1 (Western Europe)
      ISO-8859-2       - ISO Latin-2 (Central-Eastern Europe)
      windows-1252     - Windows Lat-1 (Western Europe)
      windows-1250     - Windows Lat-2 (Central-Eastern Europe)
*/
  " encoding=" qt() "ISO-8859-2" qt()
  " standalone=" qt() "yes" qt() "?>"
  "\n"
  "<LLGEDCOM>"
  forindi(pers,x) {
      call out(pers)
  }
  forfam(fm,x) {
      call out(fm)
  }
  foreven(evn, n) {
      call out(evn)
  }
  forsour(src, n) {
      call out(src)
  }
  forothr(oth, n) {
      call out(oth)
  }
  "\n</LLGEDCOM>"
}
proc out(item)
{
  "\n"
  traverse(root(item),y,level) {
    if(eqstr(tag(y),"CONT")) { "<P/>" value(y) }
    elsif(eqstr(tag(y),"CONC")) { " " value(y) }
    else {
       while(and(le(level,previous),not(empty(tagi)))) {
           "</" pop(tagi) ">"
           set(nic,pop(numery))
           set(previous,sub(previous,1))
       }
       "<" tag(y)
       if(index(value(y),"@",1)) {
           set(wart,value(y))
           " IDREF=" qt() substring(wart,2,sub(strlen(wart),1)) qt()
"/>"
       }
       else {
           if(eq(level,0)) {
               " ID=" qt() substring(xref(y),2,sub(strlen(xref(y)),1))
qt()
           }
          ">"
/* insert tag S for surname with space before and after if necessary */
    if(eqstr(tag(y),"NAME")) {
      set(bef,substring(value(y),1,sub(index(value(y),"/",1),1)))
      bef
      if(nestr(substring(bef,strlen(bef),strlen(bef))," ")) { " " }
      "<S>"
substring(value(y),add(index(value(y),"/",1),1),sub(index(value(y),"/",2),1))
      "</S>"
set(aft,substring(value(y),add(index(value(y),"/",2),1),strlen(value(y))))
      if(and(nestr(substring(aft,1,1)," ") ,ne(strlen(aft),0) )) { " " }
      aft
    }
    else { value(y) }
          push(numery,level)
          push(tagi,tag(y))
          set(previous,level)
    }
  }
}
   while(not(empty(tagi))) {
      "</" pop(tagi) ">"
      set(nic,pop(numery))
   }
}
 |