当包含 return 字符时,XPath 无法检测到 class 名称
XPath cannot detect class name when contains return char
我的 XPath 有问题 select 或者。当 class 名称具有 return 个字符(或者可能是其他原因!)时,它不能 select 名称为 class 的节点。谁能帮帮我?
var html =
@"<INPUT class=box value=John maxLength=16 size=16 name=user_name>
<INPUT class='
box1' value=Tony maxLength=16 size=16 name=user_name>
";
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);
var htmlNodes =
htmlDoc.DocumentNode.SelectNodes("//input[@class='box1']");
Console.WriteLine(htmlNodes == null);
htmlNodes = htmlDoc.DocumentNode.SelectNodes("//input[@class='box']");
Console.WriteLine(htmlNodes == null);
在第一个输入标签中,classname 与 class 在同一行,但在第二个输入元素中,class name 位于下一行。
第一个控制台的结果是 True,第二个控制台的结果是 False
问题是 box1
的 @class
值包含一个换行符和一些空格。所以检查表达式中的谓词
//input[@class='box1']
失败,你得到一个 true
的空检查。
您有两种解决方法:
删除所有 spaces/line 谓词中带有 normalize-space
的中断,如下所示:
//input[normalize-space(@class)='box1']
从 HTML 片段中删除换行符,如下所示:
var html =
@"<INPUT class=box value=John maxLength=16 size=16 name=user_name>
<INPUT class='box1' value=Tony maxLength=16 size=16 name=user_name>
";
我的 XPath 有问题 select 或者。当 class 名称具有 return 个字符(或者可能是其他原因!)时,它不能 select 名称为 class 的节点。谁能帮帮我?
var html =
@"<INPUT class=box value=John maxLength=16 size=16 name=user_name>
<INPUT class='
box1' value=Tony maxLength=16 size=16 name=user_name>
";
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);
var htmlNodes =
htmlDoc.DocumentNode.SelectNodes("//input[@class='box1']");
Console.WriteLine(htmlNodes == null);
htmlNodes = htmlDoc.DocumentNode.SelectNodes("//input[@class='box']");
Console.WriteLine(htmlNodes == null);
在第一个输入标签中,classname 与 class 在同一行,但在第二个输入元素中,class name 位于下一行。
第一个控制台的结果是 True,第二个控制台的结果是 False
问题是 box1
的 @class
值包含一个换行符和一些空格。所以检查表达式中的谓词
//input[@class='box1']
失败,你得到一个 true
的空检查。
您有两种解决方法:
删除所有 spaces/line 谓词中带有
normalize-space
的中断,如下所示://input[normalize-space(@class)='box1']
从 HTML 片段中删除换行符,如下所示:
var html = @"<INPUT class=box value=John maxLength=16 size=16 name=user_name> <INPUT class='box1' value=Tony maxLength=16 size=16 name=user_name> ";