web-dev-qa-db-fra.com

Quelle est la différence entre localname et qname?

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)?

29
Bob

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"
44
bdoughan

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

13
Eran Zimmerman

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).

http://www.saxproject.org/namespaces.html

0
Nageswara Rao