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还是从资源文件反序列化这些对象更好。
你给我推荐什么?
由于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,
};