简体   繁体   中英

Html Agility Pack/C#: how to create/replace tags?

The task is simple, but I couldn't find the answer.

Removing tags (nodes) is easy with Node.Remove()... But how to replace them?

There's a ReplaceChild() method, but it requires to create a new tag. How do I set the contents of a tag? InnerHtml and OuterHtml are read only properties.

See this code snippet:

public string ReplaceTextBoxByLabel(string htmlContent) 
{
  HtmlDocument doc = new HtmlDocument();
  doc.LoadHtml(htmlContent);

  foreach(HtmlNode tb in doc.DocumentNode.SelectNodes("//input[@type='text']"))
  {
    string value = tb.Attributes.Contains("value") ? tb.Attributes["value"].Value : " ";
    HtmlNode lbl = doc.CreateElement("span");
    lbl.InnerHtml = value;

    tb.ParentNode.ReplaceChild(lbl, tb);
  }

  return doc.DocumentNode.OuterHtml;
}

Are you sure InnerHtml is a read only property?

The HTMLAgility pack's documentation says otherwise: (Cut & Paste)

Gets or Sets the HTML between the start and end tags of the object.

Namespace:  HtmlAgilityPack
Assembly:  HtmlAgilityPack (in HtmlAgilityPack.dll) Version: 1.4.0.0 (1.4.0.0)
Syntax
C# 
public virtual string InnerHtml { get; set; }

If it is read only could you post some code?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM