web-dev-qa-db-ja.com

localnameとqnameの違いは何ですか?

SAXを使用してJavaでXMLファイルを解析する場合、startElement(String uri, String localName,String qName, Attributes attributes)などのSAXメソッドのパラメーターlocalnameqnameの違いは何ですか?

28
Bob

修飾名には、名前空間プレフィックスとローカル名の両方が含まれます: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"
44
bdoughan

一般的に、localnameはローカル名、つまり名前空間内を意味します。 qname、または修飾名は、フルネーム(名前空間を含む)です。たとえば、<a:b…>にはローカル名bがありますが、qname a:bがあります。

ただし、これは非常に一般的であり、設定に依存します。より詳細な例については、このページの最後にある例をご覧ください。 example

13
Eran Zimmerman

デフォルトでは、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

0
Nageswara Rao