我正在使用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])?
//
他们还不支持:(
答案 0 :(得分:1)
\3A
是编译时错误,因为\3
不是C#字符串中的有效转义序列,因此您需要转义反斜杠。使用\\:
或\\3A
是正确的,但无论出于何种原因,选择器引擎似乎都遇到了CSS转义序列的问题。
看看你是否可以使用属性选择器来解决这个问题,这样就完全不需要转义序列了:
HtmlNodeSelection.QuerySelectorAll(_htmlDocument.DocumentNode, "[id='unlocktheinbox:test']");