#winforms #c#-4.0 #html-agility-pack
#winforms #c #-4.0 #html-agility-pack
Вопрос:
Я извлекаю HTML многих веб-страниц (сохраненных ранее) с SQL Server. Моя цель — изменить атрибут src img. В HTML есть только один тег img, и его исходный код выглядит следующим образом:
...
<td colspan="3" align="center">
<img src="/crossword/13cnum1.gif" height="360" width="360" border="1"><br></td>
...
Мне нужно изменить /crossword/13cnum1.gif для http://www.nostrotech.com/crossword/13cnum1.gif
Код:
private void ReplaceTest() {
String currentCode = string.Empty;
Cursor saveCursor = Cursor.Current;
try {
Cursor.Current = Cursors.WaitCursor;
foreach (WebData oneWebData in DataContext.DbContext.WebDatas.OrderBy(order => order.PuzzleDate)) {
if (oneWebData.Status == "Done" ) {
currentCode = oneWebData.Code;
#region Setup Agility
HtmlAgilityPack.HtmlDocument AgilityHtmlDocument = new HtmlAgilityPack.HtmlDocument {
OptionFixNestedTags = true
};
AgilityHtmlDocument.LoadHtml(oneWebData.PageData);
#endregion
#region Image and URL
var imageOnPage = from imgTags in AgilityHtmlDocument.DocumentNode.Descendants()
where imgTags.Name == "img" amp;amp;
imgTags.Attributes["height"] != null amp;amp;
imgTags.Attributes["width"] != null
select new {
Url = imgTags.Attributes["src"].Value,
tag = imgTags.Attributes["src"],
Text = imgTags.InnerText
};
if (imageOnPage == null) {
continue;
}
imageOnPage.FirstOrDefault().tag.Value = "http://www.nostrotech.com" imageOnPage.FirstOrDefault().Url;
#endregion
}
}
}
catch (Exception ex) {
XtraMessageBox.Show(String.Format("Exception: " currentCode "!{0}Message: {1}{0}{0}Details:{0}{2}", Environment.NewLine, ex.Message, ex.StackTrace), Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally {
Cursor.Current = saveCursor;
}
}
Мне нужна помощь, поскольку разметка НЕ обновляется таким образом, и мне нужно сохранить измененную разметку обратно в базу данных. Спасибо.
Ответ №1:
XPATH гораздо более понятен, чем весь этот жаргон XLinq, ИМХО… Вот как это сделать:
HtmlDocument doc = new HtmlDocument();
doc.Load(myHtml);
foreach (HtmlNode img in doc.DocumentNode.SelectNodes("//img[@src and @height and @width]"))
{
img.SetAttributeValue("src", "http://www.nostrotech.com" img.GetAttributeValue("src", null));
}
Этот код выполняет поиск img
тегов, которые имеют src
, height
и width
атрибуты. Затем он заменяет src
значение атрибута.