gpt4 book ai didi

c# - 为每个 HTML 标签添加数字属性

转载 作者:行者123 更新时间:2023-11-30 18:04:03 25 4
gpt4 key购买 nike

我需要向文档中的每个 HTML 标记添加一个带有递增数字的自定义属性,类似于 this question ,但仅限于 HTML,而不是 XML 文件。

我试图用 HTML Agility Pack 来完成它,这是我的代码:

        HtmlDocument htmldoc = new HtmlDocument();
htmldoc.LoadHtml(text);
var num = 1;
foreach (HtmlNode node in htmldoc.DocumentNode.DescendantNodes())
{
node.Attributes.Add("gist_num",(num++).ToString());
}

var numberedfilename = Path.GetDirectoryName(fname) + @"\" + Path.GetFileNameWithoutExtension(fname) + "-num.htm";

htmldoc.Save(numberedfilename);

但是我在 HTML Agility Pack HtmlTextNode 类中遇到堆栈溢出异常。我尝试了多种方法来通过更改类来纠正此错误,但无济于事。

您在这里有什么建议?

--- 编辑 ---因此,异常只是写入控制台的“Stack Overflow”。

“进程因 StackOverflowException 而终止。”

因为它是 Stack Overflow,所以不可能获得任何堆栈值。这是 VS 显示发生此异常的代码:

    /// <summary>
/// Gets or Sets the text of the node.
/// </summary>
public string Text
{
get
{
if (_text == null)
{
return base.OuterHtml;
}
return _text;
}
set { _text = value; }
}

那么,有什么想法吗?

最佳答案

您需要过滤节点,以便您只选择元素。出于某种原因,遍历 HTML Agility Pack 中的后代会错误地包含其他节点,例如文档和文本节点。由于您盲目地向所有节点添加属性,因此它会阻碍序列化非元素节点。

// note: Descendants() and DescendantNodes() is equivalent (unfortunately)
var query = htmldoc.DocumentNode.Descendants()
.Where(node => node.NodeType == HtmlNodeType.Element);

关于c# - 为每个 HTML 标签添加数字属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6577570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com