如何在AngleSharp中更改标签名称?

时间:2016-05-20 15:38:11

标签: c# anglesharp

是否可以从代码中更改标签的名称?像这样:

var tag = doc.QuerySelector("i");
tag.TagName = "em";

这不起作用,因为TagName是只读的。

但是,我有什么选择达到同样的目的?我是否必须构建一个全新的标记并将InnerHtml设置为旧标记的内容,然后删除并交换?这甚至可能吗?

3 个答案:

答案 0 :(得分:0)

要更改元素名称,您可以使用以下组合替换初始元素的OuterHtml

  1. 新元素开场标记
  2. 初始元素' InnerHtml
  3. 新元素结束标记
  4. 以下是一个例子:

    var raw = @"<div>
        <i>foo</i>
    </div>";
    var parser = new AngleSharp.Parser.Html.HtmlParser();
    var doc = parser.Parse(raw);
    var tag = doc.QuerySelector("i");
    tag.OuterHtml = $"<em>{tag.InnerHtml}</em>";
    Console.WriteLine(doc.DocumentElement.OuterHtml);
    

    输出

    <html><head></head><body><div>
        <em>foo</em>
    </div></body></html>
    

答案 1 :(得分:0)

前几天我有同样的问题。后来我遇到的唯一解决方案就是创建另一个元素并复制原始元素中的每个属性。然后删除原始元素。

答案 2 :(得分:0)

如果您要替换html字符串中的元素,则可以通过以下方式完成:

 private static string RefineImageElement(string htmlContent)
 {
     var parser = new HtmlParser();
     var document = parser.ParseDocument(htmlContent);

     foreach (var element in document.All)
     {
         if (element.LocalName == "img")
         {
             var newElement = document.CreateElement("v-img");
             newElement.SetAttribute("src", element.Attributes["src"] == null ? "" : 
              element.Attributes["src"].Value);
             newElement.SetAttribute("alt", "Article Image");

             element.Insert(AdjacentPosition.BeforeBegin, newElement.OuterHtml);
             element.Remove();
          }
      }
      return document.FirstElementChild.OuterHtml;
}