【问题标题】:Why XmlDocument is using in Windows8 engine?为什么 XmlDocument 在 Windows8 引擎中使用?
【发布时间】:2012-05-16 16:22:16
【问题描述】:

我猜XmlDocument 是不推荐使用的类,我们必须改用XDocument。但是来自 Windows 8 UX 核心的 TileUpdateManager.GetTemplateContent 返回 XmlDocument 类。一旦它是新的 API,我想知道在这里使用 XmlDocument 的原因是什么?

【问题讨论】:

标签: c# xml windows-8 linq-to-xml xmldocument


【解决方案1】:

(我使用 XDocument 将 Linq2XML 和 XmlDocument 引用到 System.XML api 的)

我能看到的原因:

  1. XDocument 需要 LINQ,它是 .NET 特定的。 Windows 应用商店应用程序也可以使用 JavaScript 构建,因此如果您要构建一个 XDocument 以在 JavaScript 和 .NET 中工作,那么您也需要移植 LINQ,而现在工程任务非常庞大。
  2. XDocument 以功能方式处理 XML,这非常不标准 - 处理 XML 的标准方式是通过 DOM 模型。因此,XmlDocument 提供的方式与其在其他地方的工作方式更加一致。
  3. 我猜你认为它们是独立的 API - 当 XDocument 构建在普通 XmlReader 类之上时。因此,除非您完全重写 XmlDocument,否则您将始终需要它 - 重写一些运行良好的东西的价值是什么,以便您可以将它隐藏在新版本中的其他东西中。
  4. 虽然对新 API 进行了大量清理和改进,但请记住它仍然构建在 COM 和我们目前拥有的许多内置 Windows API 之上(这种抽象意味着如果在未来它不会影响我们,但目前它不直接与内核对话),因此他们很可能正在利用现有的工具和库——它们都将基于 DOM 并更好地与 XmlDocument 保持一致。

【讨论】:

    【解决方案2】:

    XmlDocument 类在 .Net 中有一段时间了,他们可能更愿意保持这种状态。另一个原因可能是多语言支持。

    您可以用另一个包装/装饰该功能。有多种方法可以将 XmlDocument 转换为 XDocument

      private static XDocument DocumentToXDocument(XmlDocument doc)
      {
        return XDocument.Parse(doc.OuterXml);
      }
    
      private static XDocument DocumentToXDocumentNavigator(XmlDocument doc)
      {
        return XDocument.Load(doc.CreateNavigator().ReadSubtree());
      }
    
      private static XDocument DocumentToXDocumentReader(XmlDocument doc)
      {
        return XDocument.Load(new XmlNodeReader(doc));
      }
    

    【讨论】:

    • 这并没有真正解决问题(关于:为什么在新的 Win8 API 中使用 older XML API?)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    相关资源
    最近更新 更多