是否可以从代码中更改标签的名称?像这样的东西:
var tag = doc.QuerySelector("i");
tag.TagName = "em";
这不起作用,因为TagName
它是只读的。
但是,为了达到同样的目的,我有哪些选择?我是否必须构建一个全新的标签并将其设置InnerHtml
为旧标签的内容,然后删除并交换?这甚至可能吗?
是否可以从代码中更改标签的名称?像这样的东西:
var tag = doc.QuerySelector("i");
tag.TagName = "em";
这不起作用,因为TagName
它是只读的。
但是,为了达到同样的目的,我有哪些选择?我是否必须构建一个全新的标签并将其设置InnerHtml
为旧标签的内容,然后删除并交换?这甚至可能吗?
如果您的意思是替换 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;
}
要更改元素名称,您可以OuterHtml
用以下组合替换初始元素:
InnerHtml
这是一个例子:
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>
前几天我也有同样的问题。后来唯一的解决方案就是简单地创建另一个元素并从原始元素中复制每个属性。然后删除原始元素。