是否可以从代码中更改标签的名称?像这样:
var tag = doc.QuerySelector("i");
tag.TagName = "em";
这不起作用,因为TagName
是只读的。
但是,我有什么选择达到同样的目的?我是否必须构建一个全新的标记并将InnerHtml
设置为旧标记的内容,然后删除并交换?这甚至可能吗?
答案 0 :(得分:0)
要更改元素名称,您可以使用以下组合替换初始元素的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>
答案 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;
}