Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HTML敏捷性分析错误_C#_Html Agility Pack - Fatal编程技术网

C# 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的表单标记的子

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的表单标记的子节点。我在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");
参考资料:

  • 错误问题和修复:
  • codeplex论坛帖子:

  • 问题是什么?我希望表单标记的所有子节点都在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...