12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273(*********************************************************************************)(* Chamo *)(* *)(* Copyright (C) 2003-2021 Institut National de Recherche en Informatique *)(* et en Automatique. All rights reserved. *)(* *)(* This program is free software; you can redistribute it and/or modify *)(* it under the terms of the GNU Lesser General Public License version *)(* 3 as published by the Free Software Foundation. *)(* *)(* This program is distributed in the hope that it will be useful, *)(* but WITHOUT ANY WARRANTY; without even the implied warranty of *)(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *)(* GNU General Public License for more details. *)(* *)(* You should have received a copy of the GNU General Public License *)(* along with this program; if not, write to the Free Software *)(* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA *)(* 02111-1307 USA *)(* *)(* Contact: Maxence.Guesdon@inria.fr *)(* *)(*********************************************************************************)(** Utilities to use XML files. *)typet=EofXmlm.tag*tlist|Dofstringletstring_of_xml?decltree=tryletb=Buffer.create256inletoutput=Xmlm.make_output?decl(`Bufferb)inletfrag=function|E(tag,childs)->`El(tag,childs)|Dd->`DatadinXmlm.output_doc_treefragoutput(None,tree);Buffer.contentsbwithXmlm.Error((line,col),error)->letmsg=Printf.sprintf"Line %d, column %d: %s"linecol(Xmlm.error_messageerror)infailwithmsg;;letxml_of_string?strips=tryletinput=Xmlm.make_input?strip~enc:(Some`UTF_8)(`String(0,s))inleteltagchilds=E(tag,childs)inletdatad=Ddinlet(_,tree)=Xmlm.input_doc_tree~el~datainputintreewithXmlm.Error((line,col),error)->letmsg=Printf.sprintf"Line %d, column %d: %s\n"linecol(Xmlm.error_messageerror)infailwithmsg|Invalid_argumente->letmsg=Printf.sprintf"%s:\n%s"esinfailwithmsg;;letread_xml_file?stripfilef=leterrors=failwith(Printf.sprintf"File %s: %s"files)intryf(xml_of_string?strip(Misc.string_of_filefile))withFailures->errors;;