При использовании SAX для синтаксического анализа XML файла на Java в чем разница между параметрами localname и qname в SAX-методах, таких как startElement(String uri, String localName,String qName, Attributes attributes)
?
В чем разница между localname и qname?
Ответ 1
Квалифицированное имя включает как префикс пространства имен, так и локальное имя: att1
и foo:att2
.
Пример XML
<root
xmlns="http://www.example.com/DEFAULT"
att1="Hello"
xmlns:foo="http://www.example.com/FOO"
foo:att2="World"/>
Код Java:
att1
Атрибуты без префикса пространства имен не выбирают пространство имен по умолчанию. Это означает, что пространство имен для элемента root
"http://www.example.com/DEFAULT"
, пространство имен для атрибута att1
равно ""
.
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"
Ответ 2
Вообще говоря, localname - это локальное имя, что означает внутри пространства имен. qname или квалифицированное имя - полное имя (включая пространство имен). Например, < a: b... > будет иметь локальное имя b, но qname a: b.
Это, однако, очень общее и зависит от настроек. Взгляните на пример в конце этой страницы для более подробного примера: пример
Ответ 3
По умолчанию читатель XML будет сообщать URI пространства имен и localName для каждого элемента, принадлежащего пространству имен, как в начале, так и в конце обработчика.
Рассмотрим следующий пример:
<html:hr xmlns:html="http://www.w3.org/1999/xhtml"/>
С обработкой пространства имен SAX2 по умолчанию читатель XML будет сообщать о событии начального и конечного элементов с URI пространства имен http://www.w3.org/1999/xhtml и localName ч. Большинство реализаций XMLReader также сообщают исходное имя qName html: hr, но этот параметр может быть просто пустой строкой (за исключением элементов, которые не находятся в пространстве имен).