2012-05-17 89 views
1

我一直在研究文本分類系統,並試圖讀取文本文檔中的單詞,解析它,將其保存爲字典,然後將其保存爲XML。將字典保存到XML文件

fileNames = openFileDialog1->FileNames; 

StreamReader^ objReader = gcnew StreamReader(fileNames[0]); 
String^ strReader = objReader->ReadToEnd();  //read it to a string 
objReader->Close(); 

//cut the file up 
String^ delimStr = L"\r,\t,\n,' ','.',','"; //pull out the return,tabs,newline 
array<Char>^ delimiter = delimStr->ToCharArray();//transform into an array 
array<String^ >^strSplit = strReader->Split(delimiter);//split up the file 
System::Collections::IEnumerator^ myenum = strSplit->GetEnumerator();//get enumerators 

Dictionary<String^, int>^ saveWords = gcnew Dictionary<String^, int>(StringComparer::InvariantCultureIgnoreCase); 
int position=-1; 

//output the file 
while (myenum->MoveNext())//enumerate through it 
{ 
     position++; 
     try{ 
      saveWords->Add((Convert::ToString(myenum->Current)),0); 
     } 
     catch (Exception ^){ 
      //some code 
     } 

} 

那麼,我應該怎麼做XMLSerializer?

P.S.對不起,如果代碼是一團糟和未優化。我對這一切都很陌生(文本解析,字典,XML),到目前爲止我只是想讓它工作。

回答

1

是的,你應該序列字典到XML文件中,有一個很好的implemenatation這裏:

http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx

更新FW 4+(從酣暢評論):

爲了爲最新的框架工作,有必要有一個根元素。

In the WriteXML add a line: 
+49 writer.WriteStartElement("dictionary"); 
+70 writer.WriteEndElement(); 

In the ReadXML add lines 
+27 reader.ReadStartElement("dictionary"); 
+45 reader.ReadEndElement() 

;

+0

這是否意味着整合一個類並從主代碼調用SerializableDictionary? – Hearty

+0

不確定我是否認同你,但我的回答是肯定的。您必須使用新的SerializableDictionary,然後調用WriteXml來獲取XML字典的表示 –

+0

是否存在可用於.Net 3.5之後的XMLSerializer?或者唯一的方法是使用您提供的鏈接中的那個自定義類。 我在問這個原因,我得到了錯誤。我不知道是不是因爲我的糟糕/錯誤的實現,或者它確實不被支持。 – Hearty