Login  Register

Re: How to access XML tag name?

Posted by stepharo on Mar 13, 2016; 12:21pm
URL: https://forum.world.st/How-to-access-XML-tag-name-tp4884065p4884292.html



Le 13/3/16 13:33, stepharo a écrit :

> 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.
         in fact for subnodes like role I should just continue the visit
flow and get

But I will keep in mind XPath. It would be grtea to have tutorial on all
these XML technologies


     - SAX
     - DOM
     - PullParser
     - XPath queries / Pastell
     - Opax

It could be XML in Pharo a nice book


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