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

.net c# html html-agility-pack xpath

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

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版本: 在MozDevTools中查看的代码的简约版本有人可以帮助我吗?

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

一般承认的答案

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

热门答案

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



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因