Разбор текущей страницы - PullRequest
       11

Разбор текущей страницы

0 голосов
/ 02 февраля 2012

Есть ли способ заставить страницу анализировать себя?

Пока у меня есть:

string whatever = TwitterSpot.InnerHtml;

HtmlDocument doc = new HtmlDocument();

doc.LoadHtml(whatever);

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

}

Я хочу проанализировать страницу, поэтому я создалродительский div с именем TwitterSpot.Поместите InnerHtml в string и загрузите его как новый HtmlDocument.

Далее я хочу получить внутри этого строковое значение "#XXXX+n " и заменить его на странице переднемного классного форматирования.

Я застреваю в цикле foreach, не знаю, как мне искать # или как просматривать загруженные HtmlDocument.

Следующий шагприменить изменения там, где я когда-либо видел тег #.Я мог бы сделать это с помощью JavaScript, вероятно, намного проще, я знаю, но я рад видеть, как я могу заставить asp.net c # делать это.

# - это строковое значение в HTML, я не являюсьссылаясь на это как Control ID.

Ответы [ 5 ]

3 голосов
/ 03 февраля 2012

Предполагая, что вы используете 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 голос
/ 03 февраля 2012

Вы можете просто изменить его на:

string whatever = TwitterSpot.InnerHtml;

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

Не требуется анализ ...

1 голос
/ 03 февраля 2012

Вы можете использовать http://htmlagilitypack.codeplex.com/ для анализа HTML и манипулирования его содержанием;работает очень хорошо.

1 голос
/ 03 февраля 2012

Полагаю, вы могли бы использовать RegEx, чтобы найти все совпадения и просмотреть их.

0 голосов
/ 03 февраля 2012

Когда я делал это раньше, я сохранял 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;");
    }
}
...