Lors de l'utilisation de SAX pour analyser un fichier XML en Java, quelle est la différence entre les paramètres localname et qname dans les méthodes SAX telles que startElement(String uri, String localName,String qName, Attributes attributes)
?
Le nom qualifié inclut à la fois le préfixe d'espace de noms et le nom local: att1
et foo:att2
.
exemple XML
<root
xmlns="http://www.example.com/DEFAULT"
att1="Hello"
xmlns:foo="http://www.example.com/FOO"
foo:att2="World"/>
Code Java:
att1
Les attributs sans préfixe d'espace de noms ne récupèrent pas l'espace de noms par défaut. Cela signifie que l'espace de noms de l'élément root
est "http://www.example.com/DEFAULT"
, l'espace de noms du att1
l'attribut est ""
.
int att1Index = attributes.getIndex("", "att1");
attributes.getLocalName(att1Index); // returns "att1"
attributes.getQName(att1Index); // returns "att1"
attributes.getURI(att1Index); // returns ""
att2
int att2Index = attributes.getIndex("http://www.example.com/FOO", "att2");
attributes.getLocalName(att2Index); // returns "att2"
attributes.getQName(att2Index); // returns "foo:att2"
attributes.getURI(att2Index); // returns "http://www.example.com/FOO"
De manière générale, localname est le nom local, c'est-à-dire à l'intérieur de l'espace de noms. qname, ou nom qualifié, est le nom complet (y compris l'espace de noms). Par exemple, <a: b…> aura un nom local b, mais un qname a: b.
Ceci est cependant très général et dépend des paramètres. Jetez un œil à l'exemple à la fin de cette page pour un exemple plus complet: exemple
Par défaut, un lecteur XML signalera un URI d'espace de noms et un nom local pour chaque élément appartenant à un espace de noms, à la fois dans le gestionnaire de début et de fin.
Prenons l'exemple suivant:
<html:hr xmlns:html="http://www.w3.org/1999/xhtml"/>
Avec le traitement par défaut de l'espace de noms SAX2, le lecteur XML rapporterait un événement d'élément de début et de fin avec l'URI de l'espace de noms http://www.w3.org/1999/xhtml et le localName hr. La plupart des implémentations XMLReader signalent également le qName html: hr d'origine, mais ce paramètre peut simplement être une chaîne vide (à l'exception des éléments qui ne sont pas dans un espace de noms).