Fizzler HTMLAgilityPack C# CSS-селектор с двоеточием
Я использую HTMLAgilityPack и пытаюсь выбрать идентификатор элемента с двоеточием.
Using Fizzler.Systems.HtmlAgilityPack;
Тест № 1 (неизвестный псевдо-класс)
HtmlNodeSelection.QuerySelectorAll( _htmlDocument.DocumentNode,"#unlocktheinbox:test");
Тест № 2 (недопустимый символ в позиции 16.)
HtmlNodeSelection.QuerySelectorAll( _htmlDocument.DocumentNode,"#unlocktheinbox\\:test");
Тест № 3 (Нераспознанная escape-последовательность)
HtmlNodeSelection.QuerySelectorAll( _htmlDocument.DocumentNode,"#unlocktheinbox\3A test");
Тест № 4 (недопустимый символ в позиции 16.)
HtmlNodeSelection.QuerySelectorAll( _htmlDocument.DocumentNode,"#unlocktheinbox\\3A test");
Что я делаю неправильно?
Оказывается, я посмотрел на исходный код 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])?
//
Они еще не поддерживают это:(
1 ответ
\3A
это ошибка времени компиляции, потому что \3
не является допустимой escape-последовательностью в строке C#, поэтому вам нужно экранировать обратную косую черту. Используя либо \\:
или же \\3A
это правильно, но механизм выбора, по-видимому, испытывает проблемы с escape-последовательностями CSS.
Посмотрите, можете ли вы обойти это с помощью селектора атрибутов, который полностью устраняет необходимость в escape-последовательностях:
HtmlNodeSelection.QuerySelectorAll(_htmlDocument.DocumentNode, "[id='unlocktheinbox:test']");