Ich muss eine Seite analysieren und internen Text von spezifiziertem Textkasten auf dieser Seite erhalten. Aber als ich diesen Code kompiliert habe:
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();
Ich hatte eine Ausnahme von Xpath mit der Nachricht "diese Zeichenfolge ist nicht geschlossen" geworfen. Und ... Quelle der Seite, die ich bei GitHub Gist gehostet analysieren muss. UPD: Minimalistische Version: Minimalistische Version des in den MozDevTools angezeigten Codes Kann mir bitte jemand helfen?
PS Sorry für mein schlechtes Englisch! PSS Als ich den Code von W3C Validator überprüfte, gibt es keine offenen Tags ... aber viele Fehler (nicht mein Problem :)) PSSS Ja, ich benutze CEFsharp, um die Seiten zu sehen, und ich bekomme Quellen von ihm. Also, wenn es Autokorrektur von HTML verwendet, warum ist dieser Code kaputt? :(
Neben dem unverkürzten einfachen Zitat in eurer ".//div[@class='panel]"
Sie anrufen:
HtmlAgilityPack.HtmlNode.ElementsFlags.Remove("form");
Bevor Sie eine Instanz von HtmlDocument
weil form
sich überlappen und somit anders behandelt werden können, können Sie mit Formularen wie jedes andere Element umgehen.
so soll folgendes geschehen:
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();
Correct SelectSingleNode(".//div[@class='panel]");
SelectSingleNode(".//div[@class='panel']");
.