2012-05-01 13 views
0

に他の機能によってアクセスすることがカント以下のコードはReadXMLFileコンストラクタ要素が同じJavaファイル

ReadXMLFile r=new ReadXMLFile("small.xml"); 
HashMap r=r.getrcset(); 

を呼び出して、私はReadXMLFileによって呼び出されるアップデートは、fnを使用してsathiyaのハッシュマップを更新していますコンストラクタ。そのうまくいっている(つまり、要素はsathiya hashmapに追加されています)。なぜなら、私はそれを印刷することができるからです。 getrcsetファイルではsathiya hashmapは空です。私はそれを印刷しようとしている間、私は0を得る:{} 1:{}。私は質問のタイトルとあなたのこのラインによって完全に混乱していますけれどもYに

package iws.falcon.matcher.pbm; 
import javax.xml.parsers.SAXParser; 
import javax.xml.parsers.SAXParserFactory; 
import org.xml.sax.Attributes; 
import org.xml.sax.SAXException; 
import org.xml.sax.helpers.DefaultHandler; 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.*; 

public class ReadXMLFile { 

public HashMap sathiya = new HashMap(); 
String filepath=null; 
int cid=0; 
int f=0; 
HashMap rc=null; 

public HashMap getrcset() 
{ 
System.out.println("inside getsathiya"+sathiya.size()); 
Set set = sathiya.entrySet(); 
// Get an iterator 
Iterator i = set.iterator(); 
// Display elements 
while(i.hasNext()) { 
Map.Entry me = (Map.Entry)i.next(); 
System.out.print(me.getKey() + ": "); 
System.out.println(me.getValue()); 
} 
System.out.println("god"+sathiya); 
return sathiya; 
} 

public void update(HashMap god) 
{ 
sathiya.put(cid,god); 
for (int i=0,n=sathiya.size();i<n;i++) 
System.out.println("inside update fn"+sathiya.get(i)); 
cid++; 
} 

    public ReadXMLFile (String fp) 
    { 
    filepath=fp; 
    try { 
    SAXParserFactory factory = SAXParserFactory.newInstance(); 
    SAXParser saxParser = factory.newSAXParser(); 
    DefaultHandler handler = new DefaultHandler() { 
    boolean name = false; 
    boolean cluster=false; 

    public void startElement(String uri, String localName,String qName, 
       Attributes attributes) throws SAXException { 

     if (qName.equalsIgnoreCase("CLUSTER")) 
     {rc=new HashMap(); 

     }`enter code here` 

     if (qName.equalsIgnoreCase("URI")) { 
      name = true; 
     } 

    } 

    public void endElement(String uri, String localName, 
     String qName) throws SAXException { 


     if (qName.equalsIgnoreCase("CLUSTER")) 
      { 
      update(rc); 
      rc.clear(); 
      } 

} 

    public void characters(char ch[], int start, int length) throws SAXException { 
     if (name) 
     { 
      String e= new String(ch, start, length); 
      rc.put(e,e); 
      name = false; 
     } 

    } 

    }; 

     saxParser.parse("small.xml", handler); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    } 

} 

答えて

1

その空を把握カント:

しかしrcsetがgetrcsetファイルに空でありません?

sathiyaが空である理由は?あなたのプログラムの動作は、コードのこの作品に似ているsathiya

if (qName.equalsIgnoreCase("CLUSTER")) { 
    update(rc); 
    rc.clear();// This line is clearing the content of rc 
} 

を更新した後、その理由は、あなたがRCを明確に要求していることをされています。上記のコードで

Map<Integer, Map<String, String>> mainCont = new HashMap<Integer, Map<String,String>>(); 

Map<String, String> content = new HashMap<String, String>(); 

content.put("1", "1"); 

mainCont.put(1, content); 

System.out.println(mainCont); 

content.clear(); 

System.out.println(mainCont); 

、mainContはコンテンツへの参照を保持しています、コンテンツはクリアされます。mainContは、そのオブジェクトを参照しているので、コンテンツの更新された値を表示します。

しかし、その代わりにcontent.clear();のあなたはそれcontent = new HashMap<String, String>();

作る場合は、mainContが別のオブジェクトになりましコンテンツポイント以降のすべての値を持っていることがわかります。

の代わりに::

if (qName.equalsIgnoreCase("CLUSTER")) { 
    update(rc); 
    rc.clear(); 
} 

この操作を行います。

は、ジェネリックを使用しての代わりに、プレーンな不安全な使用を検討してください。トピックオフ

if (qName.equalsIgnoreCase("CLUSTER")) { 
    update(rc); 
    rc = new HashMap(); 
} 

をあなたのコードに戻って来る

コレクション

+0

私はrc hashmapについて語っていません。 。私はrcset hashmapについて話しています。 。私は、更新機能でrcsetの要素を追求していますが、私はrcsetの要素にプログラムのどこにでもアクセスすることができません。 。私はrcsetをどこか別の場所に印刷しようとしたとき、0:{}、1:{} ..のように要素が空になります。 – user1368126

+0

あなたが投稿したコードにはrcとsathiyaがあります。 rcsetマップ? – mprabhat

+0

ああ申し訳ございませんが、ハッシュマップのみです。 。私はrcsetをsathiyaに改名しました。 。 – user1368126

関連する問題