Hi alex

I do not know :)
I like visitor because they are better than a series of if.
So I will see. I would like to help people to extract their information easily. May be inside the visitNode I could use XPath (do you know what is the constraint to use XPath)
does it work on dom objects?

I would like to have something like that (being able to use some node to perform custom actions) Now I do not see how from one visit method I can access the other. and if I do not do it in the visit what is the information I should store (like parent link) to be able to identify that a given role is associated to a given film.

visitFilm
    title := self extractFromChildren: #Titre.
    pays := self extractFromChildren: #Pays.
    self newFilm: title from: pays.


visitRole

 <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>



Stef


Le 13/3/16 11:26, Alexandre Bergel a écrit :
Hi Stef,

I have the impression that a visitor is not the ideal solution to query XML 
tree. It works well in some case, and it is disastrous in some other.
XPath is the way to query XML data. As far as I know, there is no complete 
support. Pastell was a nice try however...

Alexandre


On Mar 12, 2016, at 8:11 AM, stepharo <steph...@free.fr> wrote:

Thanks

Ok it was characters: I will try it
What a bad name!

I will probably have to build a stack or dictionary of dictionary of the part 
that I will not want to visit but this is another story :)

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] 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