В чем разница между локальным именем и qname? - PullRequest
28 голосов
/ 23 августа 2011

При использовании SAX для анализа XML-файла в Java, в чем разница между параметрами localname и qname в SAX-методах, таких как startElement(String uri, String localName,String qName, Attributes attributes)?

Ответы [ 3 ]

44 голосов
/ 23 августа 2011

Полное имя включает префикс пространства имен и локальное имя: 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"
13 голосов
/ 23 августа 2011

Вообще говоря, localname - это локальное имя, означающее внутри пространства имен.qname, или полное имя, является полным именем (включая пространство имен).Например,будет иметь локальное имя b, но a qname a: b.

Это, однако, очень общее и зависит от настроек.Взгляните на пример в конце этой страницы для более подробного примера: пример

0 голосов
/ 23 августа 2011

По умолчанию программа чтения XML сообщает URI пространства имен и localName для каждого элемента, принадлежащего пространству имен, как в начале, так и в конце обработчика.

Рассмотрим следующий пример:

  <html:hr xmlns:html="http://www.w3.org/1999/xhtml"/>

При обработке пространства имен SAX2 по умолчанию программа чтения XML сообщит о событии начала и конца элемента с URI пространства имен http://www.w3.org/1999/xhtml и localName hr. Большинство реализаций XMLReader также сообщают об исходном qName html: hr, но этот параметр может быть просто пустой строкой (за исключением элементов, которые не находятся в пространстве имен).

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

...