Ich habe also ein HTML-Snippet, das ich mit C # ändern möchte.
<div>
This is a specialSearchWord that I want to link to
<img src="anImage.jpg" />
<a href="foo.htm">A hyperlink</a>
Some more text and that specialSearchWord again.
</div>
und ich möchte es in folgendes umwandeln:
<div>
This is a <a class="special" href="http://mysite.com/search/specialSearchWord">specialSearchWord</a> that I want to link to
<img src="anImage.jpg" />
<a href="foo.htm">A hyperlink</a>
Some more text and that <a class="special" href="http://mysite.com/search/specialSearchWord">specialSearchWord</a> again.
</div>
Ich werde HTML Agility Pack basierend auf den vielen Empfehlungen hier verwenden, aber ich weiß nicht wohin ich gehe. Bestimmtes,
InnerHtml
Eigenschaft direkt bearbeiten (oder Text
auf InnerHtml
) oder die Dom- AppendChild
, indem Sie zB AppendChild
, PrependChild
usw. verwenden. HtmlDocument.DocumentNode.OuterHtml
Eigenschaft verwenden oder die HtmlDocument.Save
Methode verwenden (persönlich bevorzuge ich die zweite Option). Für das Parsing wähle ich die string.Replace
die den Suchbegriff in deinem div
, und verwende dann die string.Replace
Methode, um sie zu ersetzen:
var doc = new HtmlDocument();
doc.LoadHtml(html);
var textNodes = doc.DocumentNode.SelectNodes("/div/text()[contains(.,'specialSearchWord')]");
if (textNodes != null)
foreach (HtmlTextNode node in textNodes)
node.Text = node.Text.Replace("specialSearchWord", "<a class='special' href='http://mysite.com/search/specialSearchWord'>specialSearchWord</a>");
Und speichern Sie das Ergebnis in einer Zeichenfolge:
string result = null;
using (StringWriter writer = new StringWriter())
{
doc.Save(writer);
result = writer.ToString();
}
Antworten:
Beachten Sie, dass Ihr Xpath-Ausdruck möglicherweise komplexer sein muss, um das gewünschte div zu finden.
HtmlDocument doc = new HtmlDocument();
doc.Load(yourHtmlFile);
HtmlNode divNode = doc.DocumentNode.SelectSingleNode("//div[2]");
string newDiv = Regex.Replace(divNode.InnerHtml, @"specialSearchWord",
"<a class='special' href='http://etc'>specialSearchWord</a>");
divNode.InnerHtml = newDiv;
Console.WriteLine(doc.DocumentNode.OuterHtml);