C# HTML敏捷性分析错误
HTML 问题C# HTML敏捷性分析错误,c#,html-agility-pack,C#,Html Agility Pack,HTML 问题 HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(File.ReadAllText(@"C:\sample.html")); HtmlNode nd = doc.DocumentNode.SelectSingleNode("//form[@id='form1']"); //nd.InnerHtml is "". //nd.InnerText is "". 我想要的是按照出现的顺序逐个访问id=form1的表单标记的子
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(File.ReadAllText(@"C:\sample.html"));
HtmlNode nd = doc.DocumentNode.SelectSingleNode("//form[@id='form1']");
//nd.InnerHtml is "".
//nd.InnerText is "".
我想要的是按照出现的顺序逐个访问id=form1的表单标记的子节点。我在chrome开发者控制台中尝试了相同的xpath,它完全按照我想要的方式工作。是html灵活性包在从文件或Web读取html时出现问题。您的html无效,可能会阻止html敏捷性包正常工作
尝试将doctype(和xml名称空间)添加到文档的开头,并将输入元素的结束标记从>更改为/>在加载文档之前尝试添加以下语句:
nd.ChildNodes //Collection(to get all nodes in form) is always null.
nd.SelectNodes("/input") //returns null.
nd.SelectNodes("./input") //returns null.
"//form[@id='form1']/input" //returns null.
HtmlAgilityPack的默认行为将表单的所有内部元素添加为兄弟元素,而不是子元素。上面的语句改变了该行为,使它们(即输入标记)显示为子节点
您的代码如下所示:
HtmlNode.ElementsFlags.Remove("form");
参考资料:
问题是什么?我希望表单标记的所有子节点都在htmlNodecollection中。
示例页面名:
姓:
验证为:已通过。但得到同样的错误(:D哈哈,谢谢。这很有效。我想我已经定期更新了我的htmlagility dll.nuget ftw;)->是的,它只在v1.4.5之后出现,当前版本是1.4.6。很乐意帮忙。
HtmlNode.ElementsFlags.Remove("form");
HtmlNode.ElementsFlags.Remove("form");
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(File.ReadAllText(@"C:\sample.html"));
HtmlNode nd = doc.DocumentNode.SelectSingleNode("//form[@id='form1']");
etc...