Ich verwende das HTMLAgilityPack und ich versuche, eine Element-ID mit einem Doppelpunkt darin auszuwählen.
Using Fizzler.Systems.HtmlAgilityPack;
Test # 1 (unbekannte Pseudoklasse)
HtmlNodeSelection.QuerySelectorAll( _htmlDocument.DocumentNode,"#unlocktheinbox:test");
Test # 2 (ungültiges Zeichen an Position 16)
HtmlNodeSelection.QuerySelectorAll( _htmlDocument.DocumentNode,"#unlocktheinbox\\:test");
Test # 3 (Nicht erkannte Escape-Sequenz)
HtmlNodeSelection.QuerySelectorAll( _htmlDocument.DocumentNode,"#unlocktheinbox\3A test");
Test # 4 (ungültiges Zeichen an Position 16)
HtmlNodeSelection.QuerySelectorAll( _htmlDocument.DocumentNode,"#unlocktheinbox\\3A test");
Was mache ich falsch?
Stellt sich heraus, sah ich den Quellcode für Fizzler ..
// TODO Support full string syntax!
//
// string {string1}|{string2}
// string1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*\"
// string2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*\'
// nonascii [^\0-\177]
// escape {unicode}|\\[^\n\r\f0-9a-f]
// unicode \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
//
Sie unterstützen es noch nicht :(
\3A
ist ein Fehler bei der Kompilierung, weil \3
keine gültige Escape-Sequenz in einer C # -Zeichenfolge ist. Daher müssen Sie den Backslash umgehen. Die Verwendung von entweder \\:
oder \\3A
ist korrekt, aber die Selektor-Engine scheint aus irgendeinem Grund Probleme mit CSS-Escape-Sequenzen zu haben.
Sehen Sie, ob Sie dies stattdessen mit einem Attributselektor umgehen können, wodurch die Notwendigkeit von Escape-Sequenzen gänzlich entfällt:
HtmlNodeSelection.QuerySelectorAll(_htmlDocument.DocumentNode, "[id='unlocktheinbox:test']");