Hi hernan

I do not what I want :).
Irina a woman learning Pharo has a xml output from a tool (I have no idea what is inside :)
and I thought ok this is a good idea to check a bit the solutions in Pharo.

I will add your example to the PullParser Chapter. Because I like the Pull approach
I'm doing a pass on OPAX package because it was cool too.

Stef

Le 12/3/16 09:53, Hernán Morales Durand a écrit :
Hi Stephane,

Do you want to extract subtree from a XML?
Or just extract the text in specific nodes?

I think StAX parser is more friendly for selecting nodes (you don't have to subclass), i.e.:

| parser doc |
doc := '<?xml version="1.0" encoding="iso-8859-1"?>
<FILMS>
  <FILM annee="1958">
    <TITRE>Vertigo</TITRE>
    <GENRE>Drame</GENRE>
    <PAYS>USA</PAYS>
    <MES idref="3"/>
    <ROLES>
      <ROLE>
        <PRENOM>James</PRENOM>
        <NOM>Stewart</NOM>
        <INTITULE>John Ferguson</INTITULE>
      </ROLE>
      <ROLE>
        <PRENOM>Kim</PRENOM>
        <NOM>Novak</NOM>
        <INTITULE>Madeleine Elster</INTITULE>
      </ROLE>
    </ROLES>
    <RESUME>Scottie Ferguson, ancien inspecteur de police, est sujet
au vertige depuis qu''il a vu mourir son
collegue. Elster, son ami, le charge de surveiller sa femme, Madeleine, ayant des tendances suicidaires. Amoureux de la jeune femme Scottie ne remarque pas le piege qui se trame autour
 de lui et dont il va etre la victime... </RESUME>
  </FILM>
<FILMS>'.
parser := XMLPullParser parse: doc.
[ parser isEndDocument ] whileFalse: [
    parser
        if: 'FILM'
        peek: [ : found |
Transcript show: found name , ' -> ' , found attributes asString; cr.
            parser next.
            Transcript show: parser tagName ].
    parser next ]

Anyway if you want to try with SAX, have a look at #test01ParsingNodes and add some halts in BioNCBIBlastSAXParser to see it in action (that's in BioSmalltalk). I didn't used visitors though.

Hernán

2016-03-12 5:33 GMT-03:00 stepharo <steph...@free.fr <mailto:steph...@free.fr>>:

    This is more complex than that.
    Because I would like to have a visitor generated from the token I
    give.

    And this
        start
        character
        end

    does not really help me.

    Because in SAXHandler I have
            start
                where I should store the properties
           same in characters:
                to store the name
           end
                where I should invoke the visitor

    Now it means that I should only store the information for the tag
    I want.
    Does anybody already did that and publish it?
    I know doru did that in the past.
    I will try.

    Stef



    Le 11/3/16 14:17, Blondeau Vincent a écrit :

        Hi,


        The qualified name in function startElement: aQualifiedName
        attributes: aDictionary, will be FILMS and after FILM and
        after TITRE,...etc...
        So, you have to tell to your shouldVisit: method to accept
        TITRE too and get in and after you should implement
        characters: to get the content on the tag.

        Vincent

            -----Message d'origine-----
            De : Pharo-users
            [mailto:pharo-users-boun...@lists.pharo.org
            <mailto:pharo-users-boun...@lists.pharo.org>] De la part de
            stepharo
            Envoyé : vendredi 11 mars 2016 14:04
            À : Any question about pharo is welcome
            Objet : [Pharo-users] How to access XML tag name?

            Hi

            Yesterday I started to hack a smart SAX handler. The idea
            is that I want to just
            specify the tags I want to visit and the SAX handler
            should invoke (generated)
            visit methods. Like that I can easily get visitors on XML
            domain.

            Here is an example of what I did.

                  | h |
                  h := SmartSAXHandler new
                              visitor: (MyFilmVisitor new visitTags:
            #(FILM ROLE));
                              on: FileSystem workingDirectory /
            'FILMS.XML'.
                  h parseDocument.
                  ^ h



            SmartSAXHAndler >> startElement: aQualifiedName
            attributes: aDictionary

                  (visitor shouldVisit: aQualifiedName)
                      ifTrue: [
                              visitor
                                  perform: (visitor
            createdVisitSelector: aQualifiedName)
                                  with: aQualifiedName
                                  with: aDictionary
                      ]


            Object subclass: #GenericTagSAXVisitor
                  instanceVariableNames: 'visitTag visitTags'
                  classVariableNames: ''
                  category: 'SmartXMLHandler'


            GenericTagSAXVisitor>>visitTags: aCollection
                  "set the tags that will lead to a call to a
            visitTag:with: method in the visitor"

                  visitTags := aCollection collect: [ :each | each
            asLowercase ].
                  self createVisitMethods.

            and in a subclass the visit* methods automatically generated


            Now I could not get when I have a <TITRE>Vertigo</TITRE>
            where I can get the
            Vertigo information.
            I redefined several methods of SAXhandler but without success.


            <?xml version="1.0" encoding="iso-8859-1"?>
            <FILMS>
                <FILM annee="1958">
                  <TITRE>Vertigo</TITRE>
                  <GENRE>Drame</GENRE>
                  <PAYS>USA</PAYS>
                  <MES idref="3"/>
                  <ROLES>
                    <ROLE>
            <PRENOM>James</PRENOM>
                      <NOM>Stewart</NOM>
                      <INTITULE>John Ferguson</INTITULE>
                    </ROLE>
                    <ROLE>
            <PRENOM>Kim</PRENOM>
                      <NOM>Novak</NOM>
                      <INTITULE>Madeleine Elster</INTITULE>
                    </ROLE>
                  </ROLES>
                  <RESUME>Scottie Ferguson, ancien inspecteur de
            police, est sujet
            au vertige depuis qu'il a vu mourir son
               collegue. Elster, son ami, le charge de surveiller sa
            femme,
            Madeleine, ayant des tendances
               suicidaires. Amoureux de la jeune femme Scottie ne
            remarque pas le
            piege qui se trame autour
               de lui et dont il va etre la victime... </RESUME>
                </FILM>


        
!!!*************************************************************************************
        "Ce message et les pièces jointes sont confidentiels et
        réservés à l'usage exclusif de ses destinataires. Il peut
        également être protégé par le secret professionnel. Si vous
        recevez ce message par erreur, merci d'en avertir
        immédiatement l'expéditeur et de le détruire. L'intégrité du
        message ne pouvant être assurée sur Internet, la
        responsabilité de Worldline ne pourra être recherchée quant au
        contenu de ce message. Bien que les meilleurs efforts soient
        faits pour maintenir cette transmission exempte de tout virus,
        l'expéditeur ne donne aucune garantie à cet égard et sa
        responsabilité ne saurait être recherchée pour tout dommage
        résultant d'un virus transmis.

        This e-mail and the documents attached are confidential and
        intended solely for the addressee; it may also be privileged.
        If you receive this e-mail in error, please notify the sender
        immediately and destroy it. As its integrity cannot be secured
        on the Internet, the Worldline liability cannot be triggered
        for the message content. Although the sender endeavours to
        maintain a computer virus-free network, the sender does not
        warrant that this transmission is virus-free and will not be
        liable for any damages resulting from any virus transmitted.!!!"





Reply via email to