C# 向每个HTML标记添加number属性
我需要向文档中的每个HTML标记添加一个数字递增的自定义属性,类似于,但仅在HTML中,而不是XML文件中 我试图用HTML Agility Pack来完成它,下面是我的代码:C# 向每个HTML标记添加number属性,c#,html-agility-pack,C#,Html Agility Pack,我需要向文档中的每个HTML标记添加一个数字递增的自定义属性,类似于,但仅在HTML中,而不是XML文件中 我试图用HTML Agility Pack来完成它,下面是我的代码: HtmlDocument htmldoc = new HtmlDocument(); htmldoc.LoadHtml(text); var num = 1; foreach (HtmlNode node in htmldoc.DocumentNode.De
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类中遇到了堆栈溢出异常。
我尝试了几种通过更改类来纠正此错误的方法,但均无效
你有什么建议吗
---编辑---
因此,异常只是写入控制台的“堆栈溢出”
“进程因StackOverflowException而终止。”
由于是堆栈溢出,因此不可能获取任何堆栈值。
以下是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; }
}
//
///获取或设置节点的文本。
///
公共字符串文本
{
得到
{
如果(_text==null)
{
return base.OuterHtml;
}
返回文本;
}
设置{u text=value;}
}
那么,有什么想法吗?您需要过滤节点,以便只选择元素。由于某些原因,在HTML Agility Pack中遍历子体时,会错误地包含其他节点,如文档和文本节点。由于您盲目地向所有节点添加属性,因此会妨碍序列化非元素节点
// note: Descendants() and DescendantNodes() is equivalent (unfortunately)
var query = htmldoc.DocumentNode.Descendants()
.Where(node => node.NodeType == HtmlNodeType.Element);
你能发布异常和堆栈跟踪吗?@Richard我明天下班后会发布,我刚回家,手头没有代码——谢谢你的建议@Richard我添加了一些我可以得到的信息。我现在无法查看,但谢谢你的回答。我认为这是唯一的答案,所以我把它标记为正确的:)有同样的问题。Fix对我很有用!谢谢:)