【问题标题】:Convert HTML to XML with WP7使用 WP7 将 HTML 转换为 XML
【发布时间】:2011-06-11 21:52:11
【问题描述】:

简单的情况,想通过一个HTML字符串搜索,得到一些信息。 在编写大量 .Substing 和之后变得烦人。我想从 HTML 文件中找到并剪切出的每个元素的 IndexOf。

Afaik 我无法将 HTMLtidy 或 HTML Agility Pack 之类的 dll 加载到我的 WP7 项目中,所以有没有更有效和可靠的方法来搜索我的 HTML 字符串,而不是使用 IndexOf 构建 Substings?

    void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
       string document = string.Empty;
       using (var reader = new StreamReader(e.Result))
          document = reader.ReadToEnd();

       string temp = document.Substring(document.IndexOf("Games Played"), (document.IndexOf("League Games") - document.IndexOf("Games Played")));
       temp = (temp.Substring(temp.IndexOf("<span>"), (temp.IndexOf("</span>") - temp.IndexOf("<span>")))).Remove(0, 6);
       Int32.TryParse(temp, out leaugeGamesPlayed);
    }

感谢您的帮助

Gpx

【问题讨论】:

    标签: c# html xml windows-phone-7


    【解决方案1】:

    您可以使用 LINQ 解析 HTML 并找到您感兴趣的元素。例如:

    XDocument parsed = XDocument.Parse(document);
    var spans = parsed.Descendants("span");

    Beth Massi 有一篇很棒的博文:Querying HTML with LINQ to XML

    【讨论】:

    • 谢谢,得到一个“不支持的异常”——认为这可能是因为——>“所以要解决这个问题,你需要删除所有不受支持的 HTML 实体引用”但我可能没有得到它们全力以赴。
    【解决方案2】:

    作为一种解决方法,您可以考虑将 HTML 加载到 WebBrowser 控件中,然后通过注入的 javascript(回调 .NET)查询 DOM

    【讨论】:

      【解决方案3】:

      您可以使用 HTML Agility Pack,但需要手机版 HTML Agility Pack 的转换版本。它只能从 svn 存储库中获得,但效果很好,我在我的应用程序中使用它。

      http://htmlagilitypack.codeplex.com/SourceControl/changeset/view/77494#

      您可以在主干下找到两个名为 HAPPhone 和 HAPPhoneTest 的项目。您可以使用右侧的下载按钮获取代码。它使用 Linq 而不是 XPath 来工作。

      【讨论】:

        【解决方案4】:

        假设您这样做是因为您从网站/页面/服务器获取 HTML。

        不要在设备上转换。

        创建一个包装器/代理站点/服务器/页面来为您进行转换。虽然这样做的缺点是必须创建额外的服务,但它具有以下优点:

        • 服务器上的代码比分布式应用程序中的代码更容易更新。 (解析您无法直接控制的 HTML 的经验表明,您需要在解析中进行更改,因为原始 HTML 几乎肯定会在将来发生更改时给您带来意想不到的结果。)
        • 如果您可以在服务器上执行一次,则可以缓存结果,而不必让应用实例重新进行转换。
        • 凭借以上2点,应用运行速度会更快!

        如果您在设计/构建时有 HTML 文件,则将其转换为更易于使用的文件,并避免在运行时进行不必要的计算。

        【讨论】:

        • 感谢您的评论马特,当我编写一些更大的项目并使用网络服务时,我会听从您的建议。这仅适用于我自己的手机。
        猜你喜欢
        • 2014-03-08
        • 2012-09-29
        • 2011-05-18
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多