How do I use HTML Agility Pack to edit an HTML snippet

后端 未结 2 692
Happy的楠姐
Happy的楠姐 2021-01-01 17:32

So I have an HTML snippet that I want to modify using C#.

This is a specialSearchWord that I want to link to &l
相关标签:
2条回答
  • 2021-01-01 17:46
    1. The same as a full HTML document. It doesn't matter.
    2. The are 2 options: you may edit InnerHtml property directly (or Text on text nodes) or modifying the dom tree by using e.g. AppendChild, PrependChild etc.
    3. You may use HtmlDocument.DocumentNode.OuterHtml property or use HtmlDocument.Save method (personally I prefer the second option).

    As to parsing, I select the text nodes which contain the search term inside your div, and then just use string.Replace method to replace it:

    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>");
    

    And saving the result to a string:

    string result = null;
    using (StringWriter writer = new StringWriter())
    {
        doc.Save(writer);
        result = writer.ToString();
    }
    
    0 讨论(0)
  • 2021-01-01 17:56

    Answers:

    1. There may be a way to do this but I don't know how. I suggest loading the entire document.
    2. Use a combination of XPath and regular expressions
    3. See the code below for a contrived example. You may have other constraints not mentioned but this code sample should get you started.

    Note that your Xpath expression may need to be more complex to find the div that you want.

    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);
    
    0 讨论(0)
提交回复
热议问题