【问题标题】:XSL in windows phoneWindows Phone 中的 XSL
【发布时间】:2011-11-06 23:51:06
【问题描述】:

我需要在 windows phone 7 平台上对我的 xml 文件进行 XSL 转换。问题是微软从 WP7 SDK 中排除了 System.Xml.Xsl 命名空间。所以没有 XslTransform 类。 任何人都可以提出任何解决方法吗?

更新: 我有 xml 格式的文章,我需要以人类可读的形式向用户表示。使用为我工作的 Web 服务是不可能的,因为应用程序应该完全与 Internet 无关。 WebBrowser 控件曾经运行良好,但最后一次 Mango 更新 broke this approach

【问题讨论】:

  • 通过“人类可读的形式”,您在这里考虑 HTML 吗?如果是这样,XML 是否与目标 HTML 具有本质上相同的结构,所以您主要希望将 XML 元素和属性重写为 HTML 元素和属性?或者您是否会大幅重组 XML 以形成 HTML?
  • 是的,我指的是 HTML。不,我不想大幅重组 XML。只使用我自己的 string.replace 方法是个好主意。我会用它作为最后的手段。谢谢。

标签: .net windows-phone-7


【解决方案1】:

由于 Microsoft 从 WP7 中排除了 XslTransform 类,您将需要另一个实现。

由于 XslTransform 一直可用于 .NET 中的其他平台,因此在 C# 中找到您可以使用的开源实现可能并不容易。也许您可以考虑从另一个框架(例如 Java)改编 Xsl 处理器。不幸的是,这可能是一个相当大的工作量。

如果您找不到任何可以轻松用于 WP7 的东西,也许您应该问问自己,您是否真的需要它?你能改变你的架构来解决这个问题吗?

作为最后的手段,您可以构建一个为您执行 Xsl 转换的 Web 服务。这样做的明显缺点是手机必须连接到互联网才能使用它 - 并且服务必须启动。换句话说,它给解决方案增加了很多复杂性(除非您已经从服务器中提取数据,在这种情况下,我只需在返回数据之前在服务器端进行转换)。

【讨论】:

    【解决方案2】:

    @Pashec,为了建议替代方案,如果您能解释您希望实施的转换的性质,这将有所帮助。毕竟,XSLT 是一种通用的转换语言,你可以用它做任何事情。两种常见的转换场景是: (1) 复制输入的 XML 文档,除了添加/修改/删除一些选定的元素或属性外,大部分内容都是完整的; (2) 转换输入 XML 文档的基本结构,例如分组元素、两个不同层次结构之间的映射等。您能告诉我们您尝试完成的转换范围吗?

    除了了解您的目标是什么以便我们可以建议实现目标的编程方法之外,还有两个途径似乎值得进行一些调查。首先,在您的场景中,将 XML 发送到托管服务进行转换是否有意义?如果您已经将服务用于其他目的,那可能是合理的;如果没有,那可能有点多。

    其次,在 .NET Framework 中,XSLT 编译为内存中的程序集。 xsltc.exe 实用程序可用于将 XSLT 转换编译为常规(即基于文件的).NET 程序集。 Read about xsltc here 和其他地方。我没有尝试过调整 xsltc 生成的程序集以在 Windows Phone 应用程序中使用,但这可能是可行的技术。

    【讨论】:

    • 在某些情况下,您可以在windowa 手机项目中包含silverlight 库。尝试这个。从 silverlight 框架添加参考(库),看看它是否有效。在某些情况下使用它,例如 rss 提要阅读器。 Msdn 甚至有一个示例,它将 silcerlight 库加载到 wp7 项目中以处理提要。
    • @invalidusername,有趣的想法。值得一试。
    【解决方案3】:

    @Pashec 在问题的 cmets 中回答说,他想要创建的转换不会显着重构文档,那么另一个可行的解决方案是使用 XmlReader 和 XmlWiter 对,从阅读器读取元素和属性并编写相应的编写器所需的元素和属性。

    How to: Parse XML with XmlReader 中的第一个示例正好说明了这种方法。

    这种方法与 XSLT 相比具有明显的优势,因为它不会为源文档或目标文档创建 XML DOM。 XML DOM 通常是 XML 的序列化(尖括号形式)大小的 10 倍。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-23
      • 2013-02-11
      • 2011-02-04
      • 2014-12-07
      相关资源
      最近更新 更多