SAXを使用してJavaでXMLファイルを解析する場合、startElement(String uri, String localName,String qName, Attributes attributes)
などのSAXメソッドのパラメーターlocalnameとqnameの違いは何ですか?
修飾名には、名前空間プレフィックスとローカル名の両方が含まれます: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"
一般的に、localnameはローカル名、つまり名前空間内を意味します。 qname、または修飾名は、フルネーム(名前空間を含む)です。たとえば、<a:b…>にはローカル名bがありますが、qname a:bがあります。
ただし、これは非常に一般的であり、設定に依存します。より詳細な例については、このページの最後にある例をご覧ください。 example
デフォルトでは、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を報告しますが、そのパラメーターは単純に空の文字列である場合があります(名前空間にない要素を除く)。