java - parser - ¿Cuál es la diferencia entre localname y qname?
xml parser java (3)
De forma predeterminada, un lector XML informará un URI de espacio de nombres y un nombre local para cada elemento que pertenezca a un espacio de nombres, tanto en el controlador inicial como en el final.
Considere el siguiente ejemplo:
<html:hr xmlns:html="http://www.w3.org/1999/xhtml"/>
Con el procesamiento predeterminado del espacio de nombres SAX2, el lector XML informaría un evento de elementos de inicio y finalización con el URI del espacio de nombres http://www.w3.org/1999/xhtml y la hora localName. La mayoría de las implementaciones de XMLReader también reportan el qName original html: hr, pero ese parámetro podría ser simplemente una cadena vacía (excepto los elementos que no están en un espacio de nombres).
Cuando se usa SAX para analizar un archivo XML en Java, ¿cuál es la diferencia entre los parámetros localname y qname en los métodos SAX como startElement(String uri, String localName,String qName, Attributes attributes)
?
El nombre calificado incluye tanto el prefijo de espacio de nombres como el nombre local: att1
y foo:att2
.
XML de muestra
<root
xmlns="http://www.example.com/DEFAULT"
att1="Hello"
xmlns:foo="http://www.example.com/FOO"
foo:att2="World"/>
Código Java:
att1
Los atributos sin un prefijo de espacio de nombres no recogen el espacio de nombres predeterminado. Esto significa que mientras el espacio de nombres para el elemento root
es "http://www.example.com/DEFAULT"
, el espacio de nombres para el atributo att1
es ""
.
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"
En términos generales, nombre local es el nombre local, es decir, dentro del espacio de nombres. qname, o nombre calificado, es el nombre completo (incluido el espacio de nombres). Por ejemplo, <a: b ...> tendrá un nombre local b, pero un nombre q a: b.
Sin embargo, esto es muy general y depende de la configuración. Vea el ejemplo al final de esta página para ver un ejemplo más completo: example