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']");
Другие вопросы по тегам