有没有办法让页面通过自己解析?
到目前为止,我有:
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
。
答案 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;");
}
}