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 <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.!!!"