2011-08-23 19 views
26

Java'da XML dosyasını ayrıştırmak için SAX kullanırken, yerel adı ve qname arasındaki startElement(String uri, String localName,String qName, Attributes attributes) gibi SAX yöntemlerinde arasındaki fark nedir?Yerel ad ve qname arasındaki fark nedir?

cevap

0

Varsayılan olarak, bir XML okuyucu, hem başlangıç ​​hem de son işleyicide, ad alanına ait her öğe için bir Ad Alanı URI'sı ve bir yerelAdı bildirecektir. Varsayılan SAX2 Ad işleme ile

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

XML okuyucusu Namespace URI http://www.w3.org/1999/xhtml ve localName saat ile bir başlangıç ​​ve bitiş elemanı olayı rapor verecek:

aşağıdaki örneği ele alalım. Çoğu XMLReader uygulaması ayrıca orijinal qName html: hr bildirir, ancak bu parametre boş bir dize olabilir (ad alanında olmayan öğeler hariç).

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

+0

Soru: ':' QName öneki + olacak + yerel adı veya öyle olacak '{' + alanı tanım + '}' + yerel ad? Şöyle: '{http://www.w3.org/1999/xhtml} hr'. Bir önek bir öğeyi bir ad alanına bağladığından, gerçek dizgisi önemsiz olmamalıdır. Nitelikli = ad alanı ve yerel ad. –

+1

"Önek +": "+ localname" olacaktır. (Ama bunu Javadoc'a bakarak veya bir ayrıştırıcının çıktısında bulabilirsiniz - örnek olarak neden burada soruyorsunuz?) –

12

Genel olarak konuşursak, localName isim alanı içinde, yani yerel adıdır. qname veya nitelikli ad, tam addır (ad alanı dahil). Örneğin, < a: b…> bir yerel ada sahip olur, ancak bir qname a: b.

Ancak bu, çok genel ve ayarlara bağlı. Daha kapsamlı bir örnek için bu sayfanın sonundaki örneğe bakın: example

+0

+1. – Kowser

42

Nitelikli ad hem ad alanı önekini hem de yerel adı içerir: att1 ve foo:att2.

Örnek XML

<root 
    xmlns="http://www.example.com/DEFAULT" 
    att1="Hello" 
    xmlns:foo="http://www.example.com/FOO" 
    foo:att2="World"/> 

Java Kodu: varsayılan ad alanını açmıyorsun bir ad alanı öneki olmadan

att1

Nitelikler. Bu, root öğesinin ad alanı "http://www.example.com/DEFAULT" iken, att1 özniteliğinin ad alanı "" olur.

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" 
İlgili konular