【问题标题】:Parse XML from a stream on Windows 8.1 store app从 Windows 8.1 商店应用程序的流中解析 XML
【发布时间】:2014-10-28 18:59:46
【问题描述】:

我正在尝试编写我的第一个 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。

是否有一种简单、干净和有效的方法可以从 zip 存档中获取这个 XML 文件并对其进行解析,而无需将其存储在临时文件中并重新读取?

欢迎提出任何建议

【问题讨论】:

  • 如果文件很小,你不能把它读成一个字符串并从中构造你的文档吗?

标签: c# xml windows-runtime windows-store-apps


【解决方案1】:

您可以从您的流中创建一个System.Xml.XmlReader 并将其加载到System.Xml.Linq.XDocument 中进行解析。这两个都适用于 Windows 应用商店应用程序。

如果您需要 Windows.Data.Xml.Dom.XmlDocument 的功能,您可以从字符串加载它或将流转换为带有 StorageFile.CreateStreamedFileAsync 的 StorageFile,而无需往返临时文件。

【讨论】:

    【解决方案2】:

    您可能希望利用 Windows 运行时互操作扩展方法 storage 和 streams。只需引用命名空间,它将允许您获取 .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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多