私はJava SAX APIを学習していました。私は自分のXMLフィードをPHPを使って作った。私は何も来ないコンソールに自分のアプリケーションの出力を作りたかったときにここではXMLドキュメントなぜqNameは動作し、LocalNameは動作しませんでしたか?
は今です。私はXMLHandler
のendElement
メソッドに問題があると、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
[API仕様](http://docs.oracle.com/javase/1.4.2/docs/api/org/xml/sax/ContentHandler.html)によれば、名前空間処理実行されません。 – srkavin
[この記事](http://www.saxproject.org/namespaces.html)では、名前空間処理について説明しています。 – srkavin
@ srkavin答えとして投稿してください。それは謎を解決する。ありがとうございました – prometheuspk