0

我需要从 html 页面解析/提取信息。基本上我正在做的是使用 System.Net.WebClient 将页面加载为字符串,并使用 HTML Agility Pack 来获取 html 标记(表单、标签、输入等)内的内容。

但是,某些内容位于 javascript 脚本标记内,如下所示:

<script type="text/javascript">
//<![CDATA[
var itemCol = new Array();

itemCol[0] = {
    pid: "01010101",
    Desc: "Some desc",
    avail: "Available",
    price: "$10.00"
};

itemCol[1] = {
    pid: "01010101",
    Desc: "Some desc",
    avail: "Available",
    price: "$10.00"
};

//]]>
</script>

那么,如何将其解析为 .NET 中的集合?HTML Agility Pack 能帮上忙吗?我真的很感激任何帮助。

提前致谢。

4

3 回答 3

1

HAP 不会为您解析出 javascript - 它会做的最好的事情就是解析出元素的内容。

javascript.net可能符合要求。

于 2012-06-25T20:53:42.210 回答
1

你想要脚本标签内的哪一部分内容?你期待什么样的收藏。您始终可以使用以下选择脚本标签

  HtmlDocument document = new HtmlDocument();
  document.Load(downloadedHtml);
  XPathNavigator n = document.CreateNavigator();
  XPathNodeIterator scriptTags = n.Select("//script");

  foreach (XPathNavigator nav in scriptTags)
  {
    string innerXml = nav.InnerXml;

    // Parse inner xml using regex
  }
于 2012-06-25T23:53:59.197 回答
1

使用 javascript.net 库,您可以获得一个集合

 using (JavascriptContext context = new JavascriptContext())
  {
    context.SetParameter("data", new MyObject());

     StringBuilder s = new StringBuilder();

    foreach (XPathNavigator nav in scriptTags)
    {
       s.Append(nav.InnerXml);
    }

  s.Append(";data.item = itemCol;");
  context.Run(s.ToString());

  MyObject o = context.GetParameter("data") as MyObject;

然后只有一个像

   class MyObject
   {
     public object item { get; set; }
   }
于 2012-06-26T00:21:10.333 回答