2014-03-19 123 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