Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fizzler HTMLAgilityPack c#带冒号的CSS选择器_C#_Css Selectors_Html Agility Pack_Fizzler - Fatal编程技术网

Fizzler HTMLAgilityPack c#带冒号的CSS选择器

Fizzler HTMLAgilityPack c#带冒号的CSS选择器,c#,css-selectors,html-agility-pack,fizzler,C#,Css Selectors,Html Agility Pack,Fizzler,我正在使用HTMLAgilityPack,并试图选择一个带有冒号的元素ID Using Fizzler.Systems.HtmlAgilityPack; 测试#1(未知伪类) 测试#2(位置16处的无效字符) 测试#3(未识别的转义序列) 测试#4(位置16处的无效字符) 我做错了什么 结果是我查看了Fizzler的源代码。 // TODO Support full string syntax! // // string {string1}|{string2} // string

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

Using Fizzler.Systems.HtmlAgilityPack;
测试#1(未知伪类)

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

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

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

我做错了什么

结果是我查看了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])?
 //

他们还不支持:(

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

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

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

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

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

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

你的第二和第四种方法都是正确的。我不知道它们为什么会失败。我同意,我认为第二和第四种尝试也是正确的,但它不适用于HTMLAgilityPack。你的第二和第四种方法都是正确的。我不知道它们为什么会失败。我同意,我认为第二和第四种尝试也是正确的,但它不适用于HTMLAgilityPack。
HtmlNodeSelection.QuerySelectorAll( _htmlDocument.DocumentNode,"#unlocktheinbox\\3A test");
 // 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])?
 //
HtmlNodeSelection.QuerySelectorAll(_htmlDocument.DocumentNode, "[id='unlocktheinbox:test']");