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

问题描述 投票:0回答:3

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

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

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

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

c# anglesharp
3个回答
0
投票

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

  1. 新元素开放标记
  2. 初始元素的InnerHtml
  3. 新元素结束标记

这是一个例子:

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>

0
投票

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


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;
}
© www.soinside.com 2019 - 2024. All rights reserved.