2011-12-07 24 views
2

私はJava SAX APIを学習していました。私は自分のXMLフィードをPHPを使って作った。私は何も来ないコンソールに自分のアプリケーションの出力を作りたかったときにここではXMLドキュメントなぜqNameは動作し、LocalNameは動作しませんでしたか?

enter image description here

は今です。私はXMLHandlerendElementメソッドに問題があると、DefaultHandlerを示しています。ここにその実装があります。

public void endElement(String uri, String localName, String qName) throws SAXException { 
     //I added the next three lines for debugging 
     System.out.println("Found End Element " + count + " times"); 
     System.out.println("Localname = " + localName); 
     System.out.println("QName = " + qName); 
     super.endElement(uri, localName, qName); 
     if (this.currentItem != null){ 
      if (localName.equalsIgnoreCase(me.osama.XMLParsing.BaseFeedParser.ITEMNAME)){ 
       currentItem.setItemName(builder.toString()); 
      } else if (localName.equalsIgnoreCase(me.osama.XMLParsing.BaseFeedParser.ITEMSITE)){ 
       currentItem.setItemSite(builder.toString()); 
      } else if (localName.equalsIgnoreCase(me.osama.XMLParsing.BaseFeedParser.ITEMNO)){ 
       currentItem.setItemNo(builder.toString()); 
      } else if (localName.equalsIgnoreCase(me.osama.XMLParsing.BaseFeedParser.ITEM)){ 
       System.out.println(currentItem); 
       items.add(currentItem); 
      } 
      builder.setLength(0); 
     } 
     count++; 
    } 

localName条件が当てはまったことがないとコードが決定ブロックに行ったことがないので、空の今後に保たれていることが判明。一方、qNameはすべての名前を正しく持ち出しました。変数をqNameに変更すると、List<Item> itemsコレクションタイプがいっぱいになり、正しく機能しました。

ここで、なぜqNameが動作し、localNameが動作しなかったのか質問しますか? IBMのDeveloperWorksのチュートリアルはRSSフィードを使用し、localNameは完全に彼のために働いていました。

P.S.これはフィードIBMチュートリアルが使用されている:SAX namespace for Java API 1としてhttp://www.androidster.com/android_news.rss

+1

[API仕様](http://docs.oracle.com/javase/1.4.2/docs/api/org/xml/sax/ContentHandler.html)によれば、名前空間処理実行されません。 – srkavin

+0

[この記事](http://www.saxproject.org/namespaces.html)では、名前空間処理について説明しています。 – srkavin

+0

@ srkavin答えとして投稿してください。それは謎を解決する。ありがとうございました – prometheuspk

答えて

2

を、

をデフォルトでは、XMLリーダーはで、名前空間URIと名前空間に属するすべての要素のためのローカル名 を報告します開始ハンドラと 終了ハンドラの両方

おそらく、XMLに名前空間を追加し、その名前空間に要素を定義すると、有効なlocalNameが返されます。この記事では、名前空間処理では、一部の実装でが空のqNameを返すと述べています。

+0

ありがとうございます。 http://www.saxproject.org/namespaces.htmlの記事を読んだ後、私の混乱は解消されました。また、XMLフィードを表現するための適切かつ標準的な方法を学びました。ありがとうございました – prometheuspk

関連する問題