当包含返回字符时,XPath无法检测到类名

时间:2019-07-05 20:50:01

标签: xpath html-agility-pack

我对XPath选择器有问题。当类名称返回char(或可能是由于其他原因!)时,它无法按类名称选择节点。有人可以帮助我吗?

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);  

在第一个输入标签中,类名与class在同一行,但在第二个输入元素中,类名是在下一行。

第一个控制台的结果为 True ,第二个控制台的结果为 False

https://dotnetfiddle.net/HGP9H3

1 个答案:

答案 0 :(得分:1)

问题是@class的{​​{1}}值包含换行符和一些空格。因此,对表达式中谓词的检查

box1

失败,您得到//input[@class='box1'] 的空检查。

您有两种方法可以解决此问题:

  1. 删除谓词中true的所有空格/换行符,如下所示:

    normalize-space
  2. 像这样从HTML代码段中删除换行符:

    //input[normalize-space(@class)='box1']