Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Get tag content at :end_element #73

Closed
augnustin opened this issue Oct 1, 2020 · 3 comments
Closed

Get tag content at :end_element #73

augnustin opened this issue Oct 1, 2020 · 3 comments

Comments

@augnustin
Copy link

Hey,

I'm having memory issues with SweetXML

Your library looks great and performant, but I'm struggling to get what I'd like. I have a huge list of <FICHE /> elements, and I need to process those independently hence having a map of it's content would definitely do the job:

Eg.

  def handle_event(:end_element, {"FICHE", _no_attributes, text_content}, state) do
    do_transform(Saxy.SimpleForm.parse_string(text_content))
  end

But it doesn't seem possible, is it?

Thanks

@qcam
Copy link
Owner

qcam commented Oct 1, 2020

@augnustin I'm happy to help. Could you provide the full structure of the XML document you're going to parse and what you want to achieve with it?

@augnustin
Copy link
Author

augnustin commented Oct 1, 2020

Hello @qcam

Thanks for support. As a disclaimer I want you to know that I finally sorted myself out with SweetXML to avoid memory leaks, so this is just out of curiosity. But it may eventually be useful to other users of your lib.

The XML looks like:

<?xml version="1.05" encoding="UTF-8"?>
<FICHES>
  <FICHE>
    <ID_FICHE>5495</ID_FICHE>
    <NUMERO_FICHE>RNCP1001</NUMERO_FICHE>
    <NOUVELLE_CERTIFICATION>RNCP31214</NOUVELLE_CERTIFICATION>
    <INTITULE>Métiers de la piscine</INTITULE>
    <ABREGE>
      <CODE>BP</CODE>
      <LIBELLE>Brevet professionnel</LIBELLE>
    </ABREGE>
    <ETAT_FICHE>Publiée</ETAT_FICHE>
    <NOMENCLATURE_EUROPE>
      <NIVEAU>NIV4</NIVEAU>
      <INTITULE>niveau4</INTITULE>
    </NOMENCLATURE_EUROPE>
    <CODES_NSF>
      <NSF>
        <CODE>232</CODE>
        <INTITULE>Bâtiment</INTITULE>
      </NSF>
    </CODES_NSF>
    <CERTIFICATEURS>
      <CERTIFICATEUR>
        <NOM_CERTIFICATEUR>Ministère chargé de l'enseignement supérieur</NOM_CERTIFICATEUR>
      </CERTIFICATEUR>
      <CERTIFICATEUR>
        <NOM_CERTIFICATEUR>Université Nice Sophia Antipolis</NOM_CERTIFICATEUR>
      </CERTIFICATEUR>
    </CERTIFICATEURS>
    <ACTIVITES_VISEES>Le titulaire de ce BP est en mesure de réaliser l'étanchéité d'une piscine. Pour cela, le support doit être apte à recevoir le revêtement, les membranes sont posées conformément aux cotes et sans plis, la teinte de l'ensemble doit être uniforme, les découpes des pièces doivent être franches.    &lt;br /&gt; Il procède à des essais et des contrôles d'étanchéité    &lt;br /&gt; Il procède au traitement de l'eau en interprétant les résultats d'analyse et en  réglant les appareils de traitement    &lt;br /&gt;
</ACTIVITES_VISEES>
    <CAPACITES_ATTESTEES>.</CAPACITES_ATTESTEES>
    <SECTEURS_ACTIVITE>Bâtiment, entreprises de construction de piscines</SECTEURS_ACTIVITE>
    <TYPE_EMPLOI_ACCESSIBLES>Installateur de piscine</TYPE_EMPLOI_ACCESSIBLES>
    <CODES_ROME>
      <ROME>
        <CODE>F1603</CODE>
        <LIBELLE>Installation d'équipements sanitaires et thermiques</LIBELLE>
      </ROME>
    </CODES_ROME>
    <REGLEMENTATIONS_ACTIVITES>A compléter (Reprise)</REGLEMENTATIONS_ACTIVITES>
    <SI_JURY_CA>Oui</SI_JURY_CA>
    <JURY_CA>Le jury, présidé, par un inspecteur, est composé à parité : - d'enseignants appartenant à l'enseignement public ou privé ou exerçant en centre de formation d'apprentis ou en section d'apprentissage    &lt;br /&gt; - de professionnels (employeurs et salariés en nombre égal)    &lt;br /&gt;
</JURY_CA>
    <SI_JURY_FC>Oui</SI_JURY_FC>
    <JURY_FC>idem</JURY_FC>
    <SI_JURY_CQ>Oui</SI_JURY_CQ>
    <JURY_CQ>idem</JURY_CQ>
    <SI_JURY_CL>Oui</SI_JURY_CL>
    <JURY_CL>idem</JURY_CL>
    <SI_JURY_VAE>Oui</SI_JURY_VAE>
    <JURY_VAE>idem</JURY_VAE>
    <ACCESSIBLE_NOUVELLE_CALEDONIE>Non</ACCESSIBLE_NOUVELLE_CALEDONIE>
    <ACCESSIBLE_POLYNESIE_FRANCAISE>Non</ACCESSIBLE_POLYNESIE_FRANCAISE>
    <PUBLICATION_DECRET_GENERAL>
      <PUBLICATION_JO/>
    </PUBLICATION_DECRET_GENERAL>
    <PUBLICATION_DECRET_CREATION>
      <PUBLICATION_JO/>
    </PUBLICATION_DECRET_CREATION>
    <LIEN_STATISTIQUES>CNDP ONISEP    &lt;br /&gt; Légifrance pour les textes réglementaires    &lt;br /&gt;
&lt;br/&gt; &lt;a href = "http://www.onisep.fr"&gt;http://www.onisep.fr &lt;/a&gt;</LIEN_STATISTIQUES>
    <TYPE_ENREGISTREMENT>Enregistrement de droit</TYPE_ENREGISTREMENT>
    <OBJECTIFS_CONTEXTE>A compléter (Reprise)</OBJECTIFS_CONTEXTE>
    <VALIDATION_PARTIELLE>Non</VALIDATION_PARTIELLE>
    <ACTIF>Non</ACTIF>
  </FICHE>
  <FICHE>
    <ID_FICHE>15935</ID_FICHE>
    <NUMERO_FICHE>RNCP31214</NUMERO_FICHE>
    <ANCIENNE_CERTIFICATION>RNCP1001</ANCIENNE_CERTIFICATION>
    <INTITULE>Métiers de la piscine</INTITULE>
    <ABREGE>
      <CODE>BP</CODE>
      <LIBELLE>Brevet professionnel</LIBELLE>
    </ABREGE>
    <ETAT_FICHE>Publiée</ETAT_FICHE>
    <NOMENCLATURE_EUROPE>
      <NIVEAU>NIV4</NIVEAU>
      <INTITULE>niveau4</INTITULE>
    </NOMENCLATURE_EUROPE>
    <CODES_NSF>
      <NSF>
        <CODE>232</CODE>
        <INTITULE>Bâtiment</INTITULE>
      </NSF>
    </CODES_NSF>
    <CERTIFICATEURS>
      <CERTIFICATEUR>
        <NOM_CERTIFICATEUR>MINISTERE DE L'EDUCATION NATIONALE</NOM_CERTIFICATEUR>
      </CERTIFICATEUR>
    </CERTIFICATEURS>
    <ACTIVITES_VISEES>&lt;p&gt;Le titulaire de ce BP réalise (construit, installe, entretien ou rénove) des piscines, des bains à remous (spa) dans le cadre d'un usage familial ou collectif (privé ou public).&lt;/p&gt;
&lt;p&gt;La transition énergétique nécessite de prendre en compte les paramètres liés au développement durable.&lt;/p&gt;
&lt;p&gt;Les métiers de la piscine s'appuient sur un cadre technique et juridique qui évolue régulièrement en fonction des nouvelles règlementations et normes.&lt;/p&gt;
&lt;p&gt;Enterrées ou hors sol, les réalisations du secteur font appel à différentes techniques de construction et mise en oeuvre telles que les structures : en béton armé, maçonnées, préfabriquées.&lt;/p&gt;
&lt;p&gt;Le professionnel de la piscine est un technicien polyvalent car la construction, l'installation et l'entretien d'une piscine nécessitent des compétences dans les domaines de l'étude de projet (modèle numérique), le génie civil, l'hydraulique, l'énergétique et la chimie de l'eau.&lt;/p&gt;
&lt;p&gt;Il peut évoluer vers un poste de chef d'équipe ou de chef de chantier. Après une expérience professionnelle significative et selon ses compétences, il pourra évoluer vers un poste de technico-commerciel, de responsable de service ou de conducteur de travaux voire reprendre ou créer une entreprise.&lt;/p&gt;</ACTIVITES_VISEES>
    <CAPACITES_ATTESTEES>&lt;p&gt;Les compétences acquises par le titulaire du diplôme sont celles décrites dans l'ensemble des blocs de compétences.&lt;/p&gt;</CAPACITES_ATTESTEES>
    <SECTEURS_ACTIVITE>Bâtiment, entreprises de construction de piscines</SECTEURS_ACTIVITE>
    <TYPE_EMPLOI_ACCESSIBLES>Installateur de piscine</TYPE_EMPLOI_ACCESSIBLES>
    <CODES_ROME>
      <ROME>
        <CODE>F1603</CODE>
        <LIBELLE>Installation d'équipements sanitaires et thermiques</LIBELLE>
      </ROME>
    </CODES_ROME>
    <REGLEMENTATIONS_ACTIVITES>A compléter (Reprise)</REGLEMENTATIONS_ACTIVITES>
    <SI_JURY_CA>Oui</SI_JURY_CA>
    <JURY_CA>&lt;p&gt;Le jury, présidé, par un inspecteur, est composé à parité : - d'enseignants appartenant à l'enseignement public ou privé ou exerçant en centre de formation d'apprentis ou en section d'apprentissage &lt;br /&gt; - de professionnels (employeurs et salariés en nombre égal)&lt;/p&gt;</JURY_CA>
    <SI_JURY_FC>Oui</SI_JURY_FC>
    <JURY_FC>&lt;p&gt;idem&lt;/p&gt;</JURY_FC>
    <SI_JURY_CQ>Oui</SI_JURY_CQ>
    <JURY_CQ>&lt;p&gt;idem&lt;/p&gt;</JURY_CQ>
    <SI_JURY_CL>Oui</SI_JURY_CL>
    <JURY_CL>&lt;p&gt;idem&lt;/p&gt;</JURY_CL>
    <SI_JURY_VAE>Oui</SI_JURY_VAE>
    <JURY_VAE>&lt;p&gt;idem&lt;/p&gt;</JURY_VAE>
    <ACCESSIBLE_NOUVELLE_CALEDONIE>Oui</ACCESSIBLE_NOUVELLE_CALEDONIE>
    <ACCESSIBLE_POLYNESIE_FRANCAISE>Oui</ACCESSIBLE_POLYNESIE_FRANCAISE>
    <PUBLICATION_DECRET_GENERAL>
      <PUBLICATION_JO/>
    </PUBLICATION_DECRET_GENERAL>
    <PUBLICATION_DECRET_CREATION>
      <PUBLICATION_JO/>
    </PUBLICATION_DECRET_CREATION>
    <LIEN_STATISTIQUES>CNDP ONISEP    &lt;br /&gt; Légifrance pour les textes réglementaires    &lt;br /&gt;
&lt;br/&gt; &lt;a href = "http://www.onisep.fr"&gt;http://www.onisep.fr &lt;/a&gt;</LIEN_STATISTIQUES>
    <DATE_FIN_ENREGISTREMENT>01/01/2024</DATE_FIN_ENREGISTREMENT>
    <TYPE_ENREGISTREMENT>Enregistrement de droit</TYPE_ENREGISTREMENT>
    <BLOCS_COMPETENCES>
      <BLOC_COMPETENCES>
        <CODE>RNCP31214BC01</CODE>
        <LIBELLE>U11 Etude d'un ouvrage</LIBELLE>
        <LISTE_COMPETENCES>&lt;p&gt;- collecter les informations&lt;/p&gt;&#13;
&lt;p&gt;- d&amp;eacute;coder les informations&lt;/p&gt;&#13;
&lt;p&gt;- traduire une solution technique&lt;/p&gt;&#13;
&lt;p&gt;- effectuer les choix technologiques&lt;/p&gt;&#13;
&lt;p&gt;- d&amp;eacute;terminer les besoins des travaux&lt;/p&gt;&#13;
&lt;p&gt;Les modalit&amp;eacute;s d'&amp;eacute;valuation sont d&amp;eacute;crites dans les annexes de l'arr&amp;ecirc;t&amp;eacute; d&amp;eacute;finissant le dipl&amp;ocirc;me relatives &amp;agrave; l'&amp;eacute;valuation (voir notamment le r&amp;egrave;glement d'examen et les d&amp;eacute;finitions d'&amp;eacute;preuves).&lt;/p&gt;</LISTE_COMPETENCES>
      </BLOC_COMPETENCES>
      <BLOC_COMPETENCES>
        <CODE>RNCP31214BC02</CODE>
        <LIBELLE>U12 Suivi et réalisaton d'ouvrages en entreprise</LIBELLE>
        <LISTE_COMPETENCES>&lt;p&gt;- Emettre et recevoir des informations&lt;/p&gt;&#13;
&lt;p&gt;- Etablir un rapport d'activit&amp;eacute;s oral ou &amp;eacute;crit&lt;/p&gt;&#13;
&lt;p&gt;- Animer une &amp;eacute;quipe&lt;/p&gt;&#13;
&lt;p&gt;- Mener une d&amp;eacute;marche de pr&amp;eacute;vention des risques professionnels&lt;/p&gt;&#13;
&lt;p&gt;- Etablir un ordre de service&lt;/p&gt;&#13;
&lt;p&gt;- G&amp;eacute;rer les approvisionnements&lt;/p&gt;&#13;
&lt;p&gt;- Suivre et mettre &amp;agrave; jour un planning&lt;/p&gt;&#13;
&lt;p&gt;- R&amp;eacute;aliser une structure&lt;/p&gt;&#13;
&lt;p&gt;- R&amp;eacute;aliser une &amp;eacute;tanch&amp;eacute;it&amp;eacute; assur&amp;eacute;e par la structure, d&amp;eacute;pendante ou ind&amp;eacute;pendante du support&lt;/p&gt;&#13;
&lt;p&gt;Les modalit&amp;eacute;s d'&amp;eacute;valuation sont d&amp;eacute;crites dans les annexes de l'arr&amp;ecirc;t&amp;eacute; d&amp;eacute;finissant le dipl&amp;ocirc;me relatives &amp;agrave; l'&amp;eacute;valuation (voir notamment le r&amp;egrave;glement d'examen et les d&amp;eacute;finitions d'&amp;eacute;preuves).&lt;/p&gt;</LISTE_COMPETENCES>
      </BLOC_COMPETENCES>
      <BLOC_COMPETENCES>
        <CODE>RNCP31214BC03</CODE>
        <LIBELLE>U20 Mise en oeuvre et en service des équipements</LIBELLE>
        <LISTE_COMPETENCES>&lt;p&gt;- Implanter l'ouvrage&lt;/p&gt;&#13;
&lt;p&gt;- Installer les pi&amp;egrave;ces &amp;agrave; sceller&lt;/p&gt;&#13;
&lt;p&gt;- Installer un groupe de filtration&lt;/p&gt;&#13;
&lt;p&gt;- Installer les &amp;eacute;quipements p&amp;eacute;riph&amp;eacute;riques&lt;/p&gt;&#13;
&lt;p&gt;- Mettre en place les r&amp;eacute;seaux&lt;/p&gt;&#13;
&lt;p&gt;- Mettre en oeuvre les &amp;eacute;quipements de s&amp;eacute;curit&amp;eacute;&lt;/p&gt;&#13;
&lt;p&gt;- Mettre en oeuvre les mesures de pr&amp;eacute;vention des risques professionnels&lt;/p&gt;&#13;
&lt;p&gt;- R&amp;eacute;aliser la mise en eau&lt;/p&gt;&#13;
&lt;p&gt;- R&amp;eacute;aliser la mise en service du groupe de filtration&lt;/p&gt;&#13;
&lt;p&gt;- R&amp;eacute;aliser la mise en servicve des &amp;eacute;quipements p&amp;eacute;riph&amp;eacute;riques&lt;/p&gt;&#13;
&lt;p&gt;- R&amp;eacute;aliser la mise en service d'un &amp;eacute;quipement de s&amp;eacute;curit&amp;eacute;&lt;/p&gt;&#13;
&lt;p&gt;Les modalit&amp;eacute;s d'&amp;eacute;valuation sont d&amp;eacute;crites dans les annexes de l'arr&amp;ecirc;t&amp;eacute; d&amp;eacute;finissant le dipl&amp;ocirc;me relatives &amp;agrave; l'&amp;eacute;valuation (voir notamment le r&amp;egrave;glement d'examen et les d&amp;eacute;finitions d'&amp;eacute;preuves).&lt;/p&gt;</LISTE_COMPETENCES>
      </BLOC_COMPETENCES>
      <BLOC_COMPETENCES>
        <CODE>RNCP31214BC04</CODE>
        <LIBELLE>U30 Maintenance des ouvrages et traitement de l'eau</LIBELLE>
        <LISTE_COMPETENCES>&lt;p&gt;- Etablir un &amp;eacute;tat des lieux de l'ouvrage&lt;/p&gt;&#13;
&lt;p&gt;- R&amp;eacute;aliser un devis sur un ouvrage existant&lt;/p&gt;&#13;
&lt;p&gt;- R&amp;eacute;ceptionner l'ouvrage ou l'intervention&lt;/p&gt;&#13;
&lt;p&gt;- Analyser l'eau&lt;/p&gt;&#13;
&lt;p&gt;- Diagnostiquer une anomalie&lt;/p&gt;&#13;
&lt;p&gt;- Traiter l'eau&lt;/p&gt;&#13;
&lt;p&gt;- Param&amp;eacute;trer et r&amp;eacute;gler les &amp;eacute;quipements de traitement&lt;/p&gt;&#13;
&lt;p&gt;- Contr&amp;ocirc;ler l'ouvrage et mesurer ses param&amp;egrave;tres&lt;/p&gt;&#13;
&lt;p&gt;- Ex&amp;eacute;cuter les op&amp;eacute;rations d'entretien courant et p&amp;eacute;riodique&lt;/p&gt;&#13;
&lt;p&gt;- Pr&amp;eacute;parer l'ouvrage et ses &amp;eacute;quipements&lt;/p&gt;&#13;
&lt;p&gt;- Diagnostiquer un dysfonctionnement ou un d&amp;eacute;sordre&lt;/p&gt;&#13;
&lt;p&gt;- R&amp;eacute;parer un &amp;eacute;l&amp;eacute;ment ou une partie de l'ouvrage&lt;/p&gt;&#13;
&lt;p&gt;Les modalit&amp;eacute;s d'&amp;eacute;valuation sont d&amp;eacute;crites dans les annexes de l'arr&amp;ecirc;t&amp;eacute; d&amp;eacute;finissant le dipl&amp;ocirc;me relatives &amp;agrave; l'&amp;eacute;valuation (voir notamment le r&amp;egrave;glement d'examen et les d&amp;eacute;finitions d'&amp;eacute;preuves).&lt;/p&gt;</LISTE_COMPETENCES>
      </BLOC_COMPETENCES>
      <BLOC_COMPETENCES>
        <CODE>RNCP31214BC05</CODE>
        <LIBELLE>U41 Mathématiques</LIBELLE>
        <LISTE_COMPETENCES>&lt;p&gt;- Rechercher, extraire et organiser l'information&lt;/p&gt;&#13;
&lt;p&gt;- Proposer, choisir, ex&amp;eacute;cuter une m&amp;eacute;thode de r&amp;eacute;solution&lt;/p&gt;&#13;
&lt;p&gt;- Exp&amp;eacute;rimenter, simuler&lt;/p&gt;&#13;
&lt;p&gt;- Critiquer un r&amp;eacute;sultat, argumenter&lt;/p&gt;&#13;
&lt;p&gt;- Rendre compte d'une d&amp;eacute;marche, d'un r&amp;eacute;sultat, &amp;agrave; l'oral ou &amp;agrave; l'&amp;eacute;crit&lt;/p&gt;&#13;
&lt;p&gt;Les modalit&amp;eacute;s d'&amp;eacute;valuation sont d&amp;eacute;crites dans les annexes de l'arr&amp;ecirc;t&amp;eacute; d&amp;eacute;finissant le dipl&amp;ocirc;me relatives &amp;agrave; l'&amp;eacute;valuation (voir notamment le r&amp;egrave;glement d'examen et les d&amp;eacute;finitions d'&amp;eacute;preuves).&lt;/p&gt;</LISTE_COMPETENCES>
      </BLOC_COMPETENCES>
      <BLOC_COMPETENCES>
        <CODE>RNCP31214BC06</CODE>
        <LIBELLE>U42 Sciences physiques et chimiques</LIBELLE>
        <LISTE_COMPETENCES>&lt;p&gt;- Rechercher, extraire et organiser l'information&lt;/p&gt;&#13;
&lt;p&gt;- Proposer, choisir, ex&amp;eacute;cuter une m&amp;eacute;thode de r&amp;eacute;solution&lt;/p&gt;&#13;
&lt;p&gt;- Exp&amp;eacute;rimenter, simuler&lt;/p&gt;&#13;
&lt;p&gt;- Critiquer un r&amp;eacute;sultat, argumenter&lt;/p&gt;&#13;
&lt;p&gt;- Rendre compte d'une d&amp;eacute;marche, d'un r&amp;eacute;sultat, &amp;agrave; l'oral ou &amp;agrave; l'&amp;eacute;crit&lt;/p&gt;&#13;
&lt;p&gt;Les modalit&amp;eacute;s d'&amp;eacute;valuation sont d&amp;eacute;crites dans les annexes de l'arr&amp;ecirc;t&amp;eacute; d&amp;eacute;finissant le dipl&amp;ocirc;me relatives &amp;agrave; l'&amp;eacute;valuation (voir notamment le r&amp;egrave;glement d'examen et les d&amp;eacute;finitions d'&amp;eacute;preuves).&lt;/p&gt;</LISTE_COMPETENCES>
      </BLOC_COMPETENCES>
      <BLOC_COMPETENCES>
        <CODE>RNCP31214BC07</CODE>
        <LIBELLE>U50 Expression et connaissance du monde</LIBELLE>
        <LISTE_COMPETENCES>&lt;p&gt;Fran&amp;ccedil;ais et histoire-g&amp;eacute;ographie :&lt;/p&gt;&#13;
&lt;p&gt;- Produire et analyser des discours de nature vari&amp;eacute;e&lt;/p&gt;&#13;
&lt;p&gt;- Produire et analyser des supports utilisant des langages diff&amp;eacute;rents&lt;/p&gt;&#13;
&lt;p&gt;- Mobiliser la culture acquise en cours de formation pour produire et analyser des discours et des supports&lt;/p&gt;&#13;
&lt;p&gt;- Construire une r&amp;eacute;flexion personnelle fond&amp;eacute;e sur des documents propos&amp;eacute;s, sur des travaux conduits en cours, sur des lectures et une exp&amp;eacute;rience personnelle et professionnelle&lt;/p&gt;&#13;
&lt;p&gt;Les modalit&amp;eacute;s d'&amp;eacute;valuation sont d&amp;eacute;crites dans les annexes de l'arr&amp;ecirc;t&amp;eacute; d&amp;eacute;finissant le dipl&amp;ocirc;me relatives &amp;agrave; l'&amp;eacute;valuation (voir notamment le r&amp;egrave;glement d'examen et les d&amp;eacute;finitions d'&amp;eacute;preuves).&lt;/p&gt;</LISTE_COMPETENCES>
      </BLOC_COMPETENCES>
      <BLOC_COMPETENCES>
        <CODE>RNCP31214BC08</CODE>
        <LIBELLE>U60 Langue vivante</LIBELLE>
        <LISTE_COMPETENCES>&lt;p&gt;Comp&amp;eacute;tences de niveau B1+ du CECRL&lt;/p&gt;&#13;
&lt;p&gt;- S'exprimer oralement en continu&lt;/p&gt;&#13;
&lt;p&gt;- Interagir en langue &amp;eacute;trang&amp;egrave;re&lt;/p&gt;&#13;
&lt;p&gt;- comprendre un document &amp;eacute;crit r&amp;eacute;dig&amp;eacute; en langue &amp;eacute;trang&amp;egrave;re&lt;/p&gt;&#13;
&lt;p&gt;Les modalit&amp;eacute;s d'&amp;eacute;valuation sont d&amp;eacute;crites dans les annexes de l'arr&amp;ecirc;t&amp;eacute; d&amp;eacute;finissant le dipl&amp;ocirc;me relatives &amp;agrave; l'&amp;eacute;valuation (voir notamment le r&amp;egrave;glement d'examen et les d&amp;eacute;finitions d'&amp;eacute;preuves).&lt;/p&gt;</LISTE_COMPETENCES>
      </BLOC_COMPETENCES>
    </BLOCS_COMPETENCES>
    <OBJECTIFS_CONTEXTE>A compléter (Reprise)</OBJECTIFS_CONTEXTE>
    <VALIDATION_PARTIELLE>Non</VALIDATION_PARTIELLE>
    <ACTIF>Oui</ACTIF>
  </FICHE>
  <FICHE> <!-- ~10k other FICHE like this --> </FICHE> 
</FICHES>

For each fiche, I'd like to extract some of the fields, like:

  • NUMERO_FICHE
  • INTITULE
  • the list of CERTIFICATEURS/CERTIFICATEUR/NOM_CERTIFICATEUR
  • etc.

Please don't help on how to implement this as I wouldn't need it, but do you think it would make sense to get the textual content of the <FICHE></FICHE> to parse it and extract useful data within as elixir structure which is more convenient to use than a string. This wouldn't produce such memory overload, would it?

Cheers

@qcam
Copy link
Owner

qcam commented Oct 1, 2020

Hi, awesome to hear that you've found a solution! 🎉

In general, how Saxy works is that it tries to emit the tags and content on the way when the given XML document is being parsed, as events. So basically we don't need to get the textual content (then parse and extract useful data later), but you can do all of them on the fly when parsing the XML document. To do so we need a handler, which will try to turn the emit events into something meaningful and useable.

You could read more about the usage here https://hexdocs.pm/saxy/1.2.1/getting-started-with-sax.html#content.

As for memory overload, Saxy tries to avoid copying and generating new binary as much as possible during parsing. I think Saxy is one of the most memory efficient XML parsers (at least I try hard to make it so). Benchmarking shows that it usually uses much less memory than other parsers. You could check out the most recent benchmark for memory usage at https://github.com/qcam/saxy/runs/1173353227.

Furthermore, if the XML document is too big to fit into memory, Saxy supports streaming parsing, which basically means you could stream your XML file as chunks (let's say 1MB per chunk) and feed them gradually to the parser, while extracting data on-the-fly, using the Saxy.parse_stream API.

Hope it helps! Have a good time :).

@qcam qcam closed this as completed Oct 2, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants