在Windows 8.1商店应用程序上分析流中的XML
本文关键字:XML 程序上 应用程序 Windows 应用 | 更新日期: 2023-09-27 18:27:56
我正在尝试编写我的第一个windows 8.1/windows phone 8.1商店应用程序,并试图找到一种简单的方法来解析来自Zip文件的XML。
我有一个非常大的zip文件(100MB+),其中包含许多小文件,我正试图从中读取一个XML文件并对其进行解析
我使用System.IO.Compression
中的ZipArchive
和ZipArchiveEntry
类将流获取到单个文件,而无需解压缩整个zip文件,但System.Xml.XmlDocument
类似乎在商店应用程序上不可用,因此我可以找到解析该流的唯一方法是System.Xml.XmlReader
,但我希望使用XPath和其他DOM方法来访问XML内容。
WinRT似乎有Windows.Data.Xml.Dom.XmlDocument
,但它似乎不接受流,只接受IStorageFile
。
有没有一种简单、干净、高效的方法可以将这个XML文件从zip存档中取出并进行解析,而不必将其存储在临时文件中并读回?
任何建议都欢迎
您可以从流中创建System.Xml.XmlReader,并将其加载到System.Xml.Linq.XDocument中进行分析。这两项功能都可用于Windows应用商店应用程序。
如果您需要Windows.Data.Xml.Dom.XmlDocument的功能,您可以从字符串中加载它,也可以使用StorageFile.CreateStreamedFileAsync将流转换为StorageFile,而无需往返于临时文件。
您可能希望利用Windows运行时互操作扩展方法存储和流。只需引用命名空间,它将允许您获得.net流或将现有流转换为.net流。简单示例:
// using statement
using System.Runtime.InteropServices.WindowsRuntime;
// then in your class
private async Task<XDocument> OpenXmlFile() {
var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///XmlFile1.xml"));
XDocument doc;
using (var fileStream = await file.OpenStreamForReadAsync()) {
doc = XDocument.Load(fileStream);
}
return doc;
}