Fizzler HTMLAgilityPack c#CSS选择器与冒号

时间:2016-03-02 16:36:39

标签: c# css-selectors html-agility-pack fizzler

我正在使用HTMLAgilityPack,我试图选择一个带冒号的元素ID。

Using Fizzler.Systems.HtmlAgilityPack;

测试#1(未知的伪类)

HtmlNodeSelection.QuerySelectorAll( _htmlDocument.DocumentNode,"#unlocktheinbox:test");

测试#2(位置16处的字符无效。)

HtmlNodeSelection.QuerySelectorAll( _htmlDocument.DocumentNode,"#unlocktheinbox\\:test");

测试#3(无法识别的转义序列)

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 个答案:

答案 0 :(得分:1)

\3A是编译时错误,因为\3不是C#字符串中的有效转义序列,因此您需要转义反斜杠。使用\\:\\3A是正确的,但无论出于何种原因,选择器引擎似乎都遇到了CSS转义序列的问题。

看看你是否可以使用属性选择器来解决这个问题,这样就完全不需要转义序列了:

HtmlNodeSelection.QuerySelectorAll(_htmlDocument.DocumentNode, "[id='unlocktheinbox:test']");