Was ist der Unterschied zwischen den Parametern, wenn SAX zum Parsen einer XML-Datei in Java verwendet wird? lokaler Name y qname in SAX-Methoden wie startElement(String uri, String localName,String qName, Attributes attributes)
?
Antworten
Zu viele Anzeigen?Der qualifizierte Name enthält sowohl das Namespace-Präfix als auch den lokalen Namen: att1
y foo:att2
.
Beispiel-XML
<root
xmlns="http://www.example.com/DEFAULT"
att1="Hello"
xmlns:foo="http://www.example.com/FOO"
foo:att2="World"/>
Java-Code:
att1
Attribute ohne Namespace-Präfix nehmen den Standard-Namespace nicht auf. Das bedeutet, dass der Namespace für das Attribut root
Element ist "http://www.example.com/DEFAULT"
der Namespace für die att1
Attribut ist ""
.
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"
Im Allgemeinen ist localname der lokale Name, d.h. innerhalb des Namespace. qname, oder qualifizierter Name, ist der vollständige Name (einschließlich Namespace). Zum Beispiel hat <a:b > einen lokalen Namen b, aber einen qname a:b.
Dies ist jedoch sehr allgemein und hängt von den Einstellungen ab. Schauen Sie sich das Beispiel am Ende dieser Seite an, um ein ausführlicheres Beispiel zu sehen: Beispiel
Standardmäßig meldet ein XML-Reader einen Namespace-URI und einen localName für jedes Element, das zu einem Namespace gehört, sowohl im Start- als auch im End-Handler.
Betrachten Sie das folgende Beispiel:
<html:hr xmlns:html="http://www.w3.org/1999/xhtml"/>
Bei der standardmäßigen SAX2-Namespace-Verarbeitung würde der XML-Reader ein Start- und Endelement-Ereignis mit dem Namespace-URI melden http://www.w3.org/1999/xhtml und den lokalen Namen hr. Die meisten XMLReader-Implementierungen melden auch den ursprünglichen qName html:hr, aber dieser Parameter kann einfach eine leere Zeichenkette sein (außer bei Elementen, die sich nicht in einem Namespace befinden).