2014-03-19 162 views
0

我正在開發一個Windows 8.1商店應用,我有一些文字添加,但我不知道這是否是更好地使用資源文件或XML文件。XML或資源(的.resx)文件

這一塊的XML文件:

<?xml version="1.0" encoding="iso-8859-1"?> 
<words> 
    <word> 
     <id>1</id> 
     <name>Teacher</name> 
    </word> 
    <word> 
     <id>2</id> 
     <name>Pitcher</name> 
    </word> 

我要反序列化一組單詞(帶ID和姓名),並在單詞列表加載它。我問是否更好地從XML或資源文件反序列化這些對象。

你有什麼建議嗎?

+0

你打算支持一種以上的語言? – Crono

+0

我有六個文件,包含六種語言的文字。 – VansFannel

+0

你使用的是什麼ID?它必須絕對是一個序列數字,或將字符串ID做?此外,「名稱」應該代表該詞的內容*嗎?如果是這樣,它真的不清楚。 – Crono

回答

1

因爲這是Windows 8.1商店應用,這是我已經解決了這個問題:

private static async Task<List<Word>> GetWordsFromFileAsync(string folder, string file) 
{ 
    List<Word> list = null; 

    StorageFolder storageFolder = Windows.ApplicationModel.Package.Current.InstalledLocation; 
    storageFolder = await storageFolder.GetFolderAsync(folder); 

    // acquire file 
    StorageFile storageFile = await storageFolder.GetFileAsync(file); 

    Stream readStream = await storageFile.OpenStreamForReadAsync(); 
    XDocument xDoc = XDocument.Load(readStream); 
    list = xDoc 
      .Descendants("word") 
      .Select(x => new Word 
      { 
       Id = (int) x.Element("id"), 
       Name = (string) x.Element("name") 
      }).ToList(); 

    return list; 
} 

由於@Selman22點我在正確的方向。

0

我會建議你LINQ to XML,首先創建類:

public class Word 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 

} 

然後填充您的列表如下:

var words = XDocument.Load("path") 
       .Descendants("word") 
       .Select(x => new Word 
        { 
        Id = (int) x.Element("Id"), 
        Name = (string) x.Element("Name") 
        }).ToList(); 
0

創建將被用於存儲XML樣本數據類元素值:

public class Word 
{ 
string name; 
string id; 

public string Name 
{ 
    get { return name; } 
    set { name= value; } 
} 

public string ID 
{ 
    get { return id; } 
    set { id= value; } 
} 
} 

這個怎麼你從XML的廣告價值,

   var xElem = XElement.Load("XML/books.xml"); 
      var result= 
       from elem in xElem.Descendants("Word") 
       orderby elem.Attribute("name").Value 
       select new Book 
       { 
        Name = elem.Attribute("name").Value, 
        Id = elem.Element("Id").Value, 

       }; 
1

由於Visual Studio中內置了兼容的Windows 8.x的項目.resx文件,我會推薦的ressource文件的解決方案。就我個人而言,我喜歡用這種方法與優秀的ResXManager,這使得它非常簡單。

而且,這將是簡單易用使用簡單的數據綁定,它可以與XML解決方案比較複雜一點的XAML的那些話,因爲它沒有內置。那麼,爲什麼要重新發明輪子?

+0

RESX文件不會與定製ID和名稱元素的要求幫助。 – Crono

+0

此ID和名稱要求似乎是超過要求的解決方案。但是,如果你是對的,那麼這是三種高效的解決方案:XML,JSON或二進制序列化。但是,我仍然認爲.RESX文件更適合存儲這類數據。 – gretro