HtmlAgilityPack XPath 这是一个未闭合的字符串

HtmlAgilityPack XPath This is an unclosed string

我需要解析一个页面并从该页面的指定文本框中获取内部文本。但是,当我编译这段代码时:

HtmlAgilityPack.HtmlDocument infoDoc = new HtmlAgilityPack.HtmlDocument();
HtmlNode.ElementsFlags["br"] = HtmlElementFlag.Closed;
infoDoc.LoadHtml(@ProblemPageSource.ToString());
HtmlNode bodyGlobal = @infoDoc.DocumentNode.SelectSingleNode(".//body").SelectSingleNode(".//div[@class='global']");
HtmlNode globalRight = @bodyGlobal.SelectSingleNode(".//div[@class='globalRight']");
HtmlNode formPanel = @globalRight.SelectSingleNode(".//form").SelectSingleNode(".//div[@class='panel]");
ProblemCode = @formPanel.SelectNodes(".//div")[0].SelectSingleNode(".//textarea").OuterHtml.ToString(); //And here is now NullRefEx :(
codeEditor.Text = @ProblemCode.ToString();

我从 Xpath 中抛出异常,消息为 "this string is unclosed"。 并且...我需要解析的页面源位于 GitHub Gist。 UPD:简约版: Minimalistic version of the code viewed in the MozDevTools 有人可以帮我吗?

P.S。对不起,我的英语不好! P.S.S.当我通过 W3C Validator 检查代码时,没有任何未关闭的标签......但是有很多错误(不是我的问题:)) P.S.S.S.是的,我正在使用 CEFsharp 查看页面,并且我从他那里获取资源。那么,如果它使用 Html 的自动更正,为什么这段代码会被破坏? :(

SelectSingleNode(".//div[@class='panel]"); 更正为 SelectSingleNode(".//div[@class='panel']");

除了 ".//div[@class='panel]" 中的未压缩单引号外,您还需要调用:

HtmlAgilityPack.HtmlNode.ElementsFlags.Remove("form");

在创建 HtmlDocument 的实例之前,因为 form 元素允许重叠,因此处理方式不同,之后您将能够像处理任何其他元素一样处理表单。

因此应执行以下操作:

 HtmlAgilityPack.HtmlNode.ElementsFlags.Remove("form");
 HtmlNode.ElementsFlags["br"] = HtmlElementFlag.Closed;
 var infoDoc = new HtmlAgilityPack.HtmlDocument();
 infoDoc.LoadHtml(@ProblemPageSource.ToString());
 HtmlNode bodyGlobal = infoDoc.DocumentNode.SelectSingleNode("//body//div[@class='global']");
 HtmlNode globalRight = @bodyGlobal.SelectSingleNode(".//div[@class='globalRight']");
 HtmlNode formPanel = @globalRight.SelectSingleNode(".//form//div[@class='panel']");
 var ProblemCode = @formPanel.SelectSingleNode(".//div/textarea").OuterHtml.ToString();