Login  Register

Re: How to access XML tag name?

Posted by stepharo on Mar 12, 2016; 8:07am
URL: https://forum.world.st/How-to-access-XML-tag-name-tp4884065p4884150.html

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:[hidden email]] 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.!!!"