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

时间:2016-03-13 14:57:53

标签: c# html .net xpath html-agility-pack

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

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抛出的消息“这个字符串是未关闭的”。 并且...我需要在GitHub Gist托管的页面来源。 UPD:简约版: Minimalistic version of the code viewed in the MozDevTools 请有人帮帮我吗?

P.S。对不起,我的英语不好! P.S.S.当我通过W3C Validator检查代码时,没有任何unclose标签...但是很多错误(不是我的问题:)) P.S.S.S.是的,我正在使用CEFsharp查看页面,我从他那里得到了消息。那么,如果它使用Html的自动更正,为什么这个代码被破坏? :(

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

除了".//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();