Что лучший способ состоит в том, чтобы перерыть HTML в строке C# для определенного текста и отметить текст?

Вы можете попробовать следующий запрос, используя Pivot для достижения желаемого результата.

Create Table Article (ArticleId Int, [Description] Varchar(10))
Insert Into Article Values (1, 'Test')

Create Table OrderForecast(ArticleId Int, [Week] Int, [Order] Int, Amount Int)
Insert Into OrderForecast Values (1, 51, 1, 0),(1, 52, 2, 150), (1, 1, 3, 0),(1, 2, 4, 200), (1, 3, 5,0)

Select ArticleId, [Description], Week51, Week52, Week1, Week2, Week3
from
(
  select ArticleId, [Description], Amount, [Week]
  from 
    (
    SELECT OrderForecast.ArticleId, 'Week' + Convert(Varchar(10), OrderForecast.[Week]) as [Week], [Order], Amount, 
        Article.[Description] as [Description] FROM OrderForecast
    Inner Join Article On OrderForecast.ArticleId = Article.ArticleId
    )a
) d
pivot
(
  max(Amount)
  for [Week] in (Week51, Week52, Week1, Week2, Week3)
) piv;

Результат будет таким, как показано ниже

ArticleId   Description Week51  Week52  Week1   Week2   Week3
-------------------------------------------------------------
1           Test        0       150     0       200     0

Здесь я использовал запрос в качестве таблицы, потому что неделя была в числах, таких как 1, 2, но вы хотите, чтобы результат был на неделе1, неделе2 и т.д. Итак, я связал слово Week в числе и использовал его в запросе Pivot.

Вы можете найти живое демо Live Demo Здесь

6
задан Yttrium 19 January 2009 в 04:12
поделиться

6 ответов

Регулярное выражение было бы моим путем.;)

1
ответ дан 8 December 2019 в 18:42
поделиться

Если HTML, который Вы используете XHTML совместимый, Вы могли бы загрузить его как XML-документ и затем использовать XPath/XSL - долго обветренный, но довольно изящный?

Подход, который я использовал в прошлом, должен использовать HTMLTidy, чтобы преобразовать грязный HTML в XHTML, и затем использовать XSL/XPath для контента анализа экранных данных в базу данных, создать обратную систему управления контентом.

Регулярные выражения сделали бы это, но могли быть сложными, после того как Вы пытаетесь снять теги, названия картинки и т.д., удалить ложные положительные стороны.

1
ответ дан 8 December 2019 в 18:42
поделиться

В простых случаях регулярные выражения сделают.

представьте вход в виде строки = "ttttttgottttttt";
представьте вывод в виде строки = Regex. Замена (вход, "пойдите", "<сильные> 0$ </сильный>");

уступит: "tttttt <сильное> движение </сильный> ttttttt"

Но когда Вы говорите, что HTML, если Вы обращаетесь к представленному окончательному тексту, это - определенная путаница. Скажите, что у Вас есть этот HTML:

<охватывают класс = "firstLetter"> B </промежуток> ook

Для выделения слова 'Book' Вы нуждались бы в помощи надлежащего рендерера HTML. Для упрощения можно сначала удалить все теги и оставить только содержание и затем сделать обычную замену, но она не чувствует себя хорошо.

1
ответ дан 8 December 2019 в 18:42
поделиться

Ища строки, Вы захотите искать регулярные выражения. Что касается маркировки его, после того как у Вас есть положение подстроки, которую должно быть достаточно просто использовать это для добавления в чем-то для переноса фразы.

0
ответ дан 8 December 2019 в 18:42
поделиться

Вы могли посмотреть на использование HTML DOM, проект с открытым исходным кодом на SourceForge.net. Таким образом, Вы могли программно управлять своим текстом вместо регулярных выражений надежды.

1
ответ дан 8 December 2019 в 18:42
поделиться

I like using Html Agility Pack very easy to use, although there hasn't been much updates lately, it is still usable. For example grabbing all the links

HtmlWeb client = new HtmlWeb();
HtmlDocument doc = client.Load("http://yoururl.com");            
HtmlNodeCollection Nodes = doc.DocumentNode.SelectNodes("//a[@href]");         

foreach (var link in Nodes)
{                
    Console.WriteLine(link.Attributes["href"].Value);
}
9
ответ дан 8 December 2019 в 18:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: