在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中的ZipArchiveZipArchiveEntry类将流获取到单个文件,而无需解压缩整个zip文件,但System.Xml.XmlDocument类似乎在商店应用程序上不可用,因此我可以找到解析该流的唯一方法是System.Xml.XmlReader,但我希望使用XPath和其他DOM方法来访问XML内容。

WinRT似乎有Windows.Data.Xml.Dom.XmlDocument,但它似乎不接受流,只接受IStorageFile

有没有一种简单、干净、高效的方法可以将这个XML文件从zip存档中取出并进行解析,而不必将其存储在临时文件中并读回?

任何建议都欢迎

在Windows 8.1商店应用程序上分析流中的XML

您可以从流中创建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;
}