当包含 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

https://dotnetfiddle.net/HGP9H3

问题是 box1@class 值包含一个换行符和一些空格。所以检查表达式中的谓词

//input[@class='box1']

失败,你得到一个 true 的空检查。

您有两种解决方法:

  1. 删除所有 spaces/line 谓词中带有 normalize-space 的中断,如下所示:

    //input[normalize-space(@class)='box1']
    
  2. 从 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>
    ";