Fizzler HTMLAgilityPack c#带冒号的CSS选择器
我正在使用HTMLAgilityPack,并试图选择一个带有冒号的元素IDFizzler 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
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']");