XML或资源(.resx)文件

本文关键字:文件 resx 资源 XML | 更新日期: 2023-09-27 17:50:56

我正在开发一个Windows 8.1商店应用程序,我有一些文本要添加,但我不确定是否使用资源文件或XML文件更好。

这是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还是从资源文件反序列化这些对象更好。

你给我推荐什么?

XML或资源(.resx)文件

由于Visual Studio与Windows 8上的。resx文件具有内置兼容性。在x项目中,我建议使用资源文件解决方案。就我个人而言,我喜欢在优秀的ResXManager中使用这种方法,它使它非常简单。

此外,使用简单的DataBinding在XAML中使用这些单词也很简单,而使用XML解决方案可能会稍微复杂一些,因为它不是内置的。那么,为什么要重新发明轮子呢?

因为这是一个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给我指明了正确的方向。

我建议你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();

创建一个示例数据类,用于存储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, 
                };