区域选择器例子


Query() 方法第三个参数:区域选择器,一般在采集列表的场景下使用。

  1. <?php
  2. require 'querylist/vendor/autoload.php';
  3. use QL\QueryList;
  4. //采集#main下面的li里面的内容
  5. $html =<<<STR
  6. <div id="main">
  7. <ul>
  8. <li>
  9. <h1>这是标题1</h1>
  10. <span>这是文字1<span>
  11. </li>
  12. <li>
  13. <h1>这是标题2</h1>
  14. <span>这是文字2<span>
  15. </li>
  16. </ul>
  17. </div>
  18. STR;
  19. //方法一,不推荐
  20. $data = QueryList::Query($html,array(
  21. 'title' => array('#main>ul>li>h1','text'),
  22. 'content' => array('#main>ul>li>span','text')
  23. ))->data;
  24. print_r($data);
  25. //方法二,设置范围选择器
  26. $data = QueryList::Query($html,array(
  27. 'list' => array('h1','text'),
  28. 'content' => array('span','text')
  29. ),'#main>ul>li')->data;
  30. print_r($data);
  31. /**
  32. 两种方式的输出结果都相同:
  33. Array
  34. (
  35. [0] => Array
  36. (
  37. [title] => 这是标题1
  38. [content] => 这是文字1
  39. )
  40. [1] => Array
  41. (
  42. [title] => 这是标题2
  43. [content] => 这是文字2
  44. )
  45. )
  46. */
  47. //但方法一有严重的缺陷,例如html变成这样,其它代码不变
  48. $html =<<<STR
  49. <div id="main">
  50. <ul>
  51. <li>
  52. <h1>这是标题1</h1>
  53. </li>
  54. <li>
  55. <h1>这是标题2</h1>
  56. <span>这是文字2<span>
  57. </li>
  58. </ul>
  59. </div>
  60. STR;
  61. /**
  62. 方法一输出结果,结果已经错位了:
  63. Array
  64. (
  65. [0] => Array
  66. (
  67. [title] => 这是标题1
  68. [content] => 这是文字2
  69. )
  70. [1] => Array
  71. (
  72. [title] => 这是标题2
  73. )
  74. )
  75. 方法二输出结果,依旧正确:
  76. Array
  77. (
  78. [0] => Array
  79. (
  80. [list] => 这是标题1
  81. [content] =>
  82. )
  83. [1] => Array
  84. (
  85. [list] => 这是标题2
  86. [content] => 这是文字2
  87. )
  88. )
  89. */