解析当前页面

时间:2012-02-02 19:55:41

标签: c# asp.net .net html-agility-pack

有没有办法让页面通过自己解析?

到目前为止,我有:

string whatever = TwitterSpot.InnerHtml;

HtmlDocument doc = new HtmlDocument();

doc.LoadHtml(whatever);

foreach("this is where I am stuck")
{

}

我想解析页面,所以我所做的就是创建一个名为TwitterSpot的父div。将InnerHtml放入string,并将其作为新HtmlDocument加载。

接下来,我希望在其中加入"#XXXX+n "的字符串值,并在页面前面用一些很酷的格式替换它。

我遇到了我的foreach循环,不知道应该如何搜索#或如何浏览加载的HtmlDocument

下一步是将更改应用到我看过#标签的位置。我能做到这一点就是JavaScript,我知道这可能要容易得多,但我很擅长看到如何通过asp.net c#来实现它。

#是html中的字符串值,我没有将其称为Control ID

5 个答案:

答案 0 :(得分:3)

假设您正在使用HtmlAgilityPack,您可以使用xpath查找包含您的值的文本节点:

var matchedNodes = document.DocumentNode
              .SelectNodes("//text()[contains(.,'#XXXX+n ')]");

然后你可以通过这些节点进行交互并完成所有必要的替换:

foreach (HtmlTextNode node in matchedNodes)
{
    node.Text = node.Text.Replace("#XXXX+n ", "brand new text");
}

答案 1 :(得分:1)

我猜你可以使用RegEx找到所有匹配并循环遍历它们。

答案 2 :(得分:1)

您可以使用http://htmlagilitypack.codeplex.com/来解析HTML并操纵其内容;效果很好。

答案 3 :(得分:1)

您可以将其更改为:

string whatever = TwitterSpot.InnerHtml;

whatever = whatever.Replace("#XXXX+n ", String.format("<b>{0}</b>", "#XXXX+n "));

无需解析...

答案 4 :(得分:0)

当我之前这样做时,我将HTML存储在XML文档中并循环遍历每个节点。然后,您可以应用XSLT或仅解析节点。

虽然您并不真的需要这样做,但这听起来像是出于您的目的。我建议将div设置为服务器控件,并以编程方式循环遍历其子控件,如下所示:

foreach (Object o in divSomething.Controls)
{
    if (o.GetType == "TextBox" && ((TextBox)o).ID == "txtSomething")
    {
        ((TextBox)o).Attributes.Add("style", "font: Arial; color: Red;");
    }
}