Bonjour Hervé,
1. C'est d'abord une question SAX.
Les informations fournies aux gestionnaires SAX dépendent de la
configuration du "lecteur" (XMLReader).
Cette configuration est conditionnée par les fonctionnalités (features)
mentionnées dans la section "namespaces" de la norme[1]. Voyez le tableau au
§ "Configuring Namespace Support".
La configuration la plus courante est sans doute ".../namespaces" = faux et
".../namespace-prefixes" = vrai.
2. JAXP
Je trouve que JAXP ajoute plus de confusion et de bugs (actuellement)
qu'autre chose.
Par exemple, je dispose d'une configuration assez courante de Xalan:
java org.apache.xerces.framework.Version -> "Xerces 1.4.0"
java org.apache.xalan.processor.XSLProcessorVersion -> "Xalan Java Version
2.1.0"
Je fais rouler votre code et voici le résultat:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
at saxessai.main(saxessai.java:18)
Je préfère m'en tenir à des formules 100% pur SAX, plus robustes:
analyseur = XMLReaderFactory.createXMLReader();
analyseur.setFeature("http://xml.org/sax/features/namespaces", false);
analyseur.setFeature("http://xml.org/sax/features/namespace-prefixes",
true);
analyseur.setFeature("http://xml.org/sax/features/validation", false);
analyseur.setContentHandler(gestionnaire);
analyseur.parse(source);
3. Des références et des échantillons de code
J'ai inscrit en ligne quelques références[réf] (pour mon cours "XML avancé:
SAX+DOM").
Je recommande particulièrement les cours de Elliotte Rusty Harold.
Pour ceux qui veulent faire des copier/coller, j'ai en ligne quelques
échantillons de code[codes] assez académiques.
On trouve également en ligne les exemples du livre « XML : Grand Livre » de
MICRO APPLICATION[MA].
-- Laurent CAPRANI
Montréal
[1] http://sax.sourceforge.net/?selected=namespaces
[réf] http://formation.espacecourbe.com/caprani/XML%20avance/
[codes] http://formation.espacecourbe.com/caprani/XML%20avance/Exercices.zip
et http://formation.espacecourbe.com/caprani/Outils.zip
[MA] http://microapp.com/exemples/3057/3057.zip
et http://microapp.com/sommaires/3057.pdf
> -----Message d'origine-----
> De : xml-tech-bounce@xmlfr.org [mailto:xml-tech-bounce@xmlfr.org]De la
> part de Herve AGNOUX
> Envoyé : 6 février, 2002 09:50
> À : xml-tech@xmlfr.org
> Objet : [xml-tech] SAX : localName et qName
>
>
> Hum ! Une question typique Java, bien que très orientée XML ! A ma
> défense, je l'ai déjà posée sur java@u-strasbg.fr, et j'ai pas eu de
> réponse. Aurai-je plus de chance avec vous ? Merci d'avance.
>
> Pourriez-vous m'expliquer une différence de comportement d'un
> analyseur SAX ?
>
> Je fais passer le fichier XML suivant :
>
> <?xml version="1.0" encoding="ISO-8859-1"?>
>
> <zozo> </zozo>
>
> ... dans le parser SAX de jaxp. J'affiche les parametres de la
> methode startElement de mon pilote sax. J'obtiens :
>
> uri=
>
> localName=zozo
>
> qName=zozo
>
> Puis je fais pareil avec Xalan J 2.2.0. J'obtiens :
>
> uri=
>
> localName=
>
> qName=zozo
>
> Vous remarquerez que les valeurs de localName ne sont pas les mêmes.
> Qui a raison ? Que dois-je faire pour avoir un comportement à peu
> près stable en fonction des parsers sax ? (je voudrais tout
> simplement traiter une balise XML ! Est-ce que qName c'est fiable !?
> )
>
> Voici mon programme java (excusez le coté frugal, c'est pour la démo)
> :
>
> ==>
>
> import javax.xml.parsers.ParserConfigurationException; import
> javax.xml.parsers.SAXParser; import
> javax.xml.parsers.SAXParserFactory;
>
> import org.xml.sax.Attributes; import org.xml.sax.SAXException;
> import org.xml.sax.SAXParseException; import
> org.xml.sax.helpers.AttributesImpl;
>
> public class saxessai { private PiloteSAX monSAX;
>
> public saxessai(String nomFichierXML) throws Exception {
> SAXParserFactory saxpf = SAXParserFactory.newInstance();
> SAXParser saxp = saxpf.newSAXParser(); monSAX = new PiloteSAX();
> saxp.parse(nomFichierXML, monSAX); }
>
> public static void main(String args[]) throws Exception { new
> saxessai(args[0]); }
>
> private class PiloteSAX extends org.xml.sax.helpers.DefaultHandler
> { public void startElement (String uri, String localName,
> String qName, Attributes attributes) throws SAXException {
> System.out.println("uri="+uri+
> "\nlocalName="+localName+ "\nqName="+qName);
> } } }
>
> Pour le lancer il faut faire java saxessai <mon fichier xml>
>
> Merci d'avance.
--
Devenez redacteur <XML>fr et contribuez au developpement du
xml francophone (http://xmlfr.org/infos/redacteurs/) !
Liste de diffusion "xml-tech@xmlfr.org" (http://xmlfr.org).
Cette liste est a votre disposition pour discuter en francais de
tout sujet technique lie a XML.
Pour resilier votre abonnement, envoyez un message contenant
la commande "unsubscribe" a xml-tech-request@xmlfr.org
(mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)
Received on Wed Feb 6 23:33:21 2002