我需要解析一个页面并从该页面上指定的文本框中获取内部文本。但是,当我编译这段代码时:
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的自动更正,为什么这个代码被破坏? :(
答案 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();