1

我正在使用以下查询:

//*[contains(concat(" ", normalize-space(@class), " "), " sub-category-wrap ")][1]/dl/dt

这应该选择第一个.sub-category-wrap并返回它的/dl/dt内容。理想情况下,这将是:

  • Yarn
  • Mice

由于某种原因,它返回:

  • Yarn
  • Mice
  • Fast Tires
  • Fancy Paint

因此,出于某种原因,它从dt两个元素中的 's 中获取内容.clear-wrap。我似乎无法让它dt从第 n 个中选择 's .sub-category-wrap

注意: xpath 查询中的[1]选择器实际上是我的代码中的一个变量,因此请在您提供的解决方案中记住这一点。

<div class="clear-wrap">
      <div class="sub-category-wrap">
        <h3>Cats</h3>
        <dl>      
          <dt>Yarn</dt>
            <dd><!-- Content --> </dd>
          <dt>Mice</dt>
          <dd><!-- Content --></dd>
        </dl>
      </div>
    <div class="sub-category-wrap">
        <h3>Dogs</h3>
        <dl>      
          <dt>Kibbles</dt>
            <dd><!-- Content --> </dd>
          <dt>Drool</dt>
          <dd><!-- Content --></dd>
        </dl>
      </div>
 </div>
 <div class="clear-wrap">
      <div class="sub-category-wrap">
        <h3>Cars</h3>
        <dl>      
          <dt>Fast Tires</dt>
            <dd><!-- Content --> </dd>
          <dt>Fancy Paint</dt>
          <dd><!-- Content --></dd>
        </dl>
      </div>
    <div class="sub-category-wrap">
        <h3>Trucks</h3>
        <dl>      
          <dt>Mud Tires</dt>
            <dd><!-- Content --> </dd>
          <dt>Loud Pipes</dt>
          <dd><!-- Content --></dd>
        </dl>
      </div>
 </div>
4

2 回答 2

2

您的查询正在检查该元素是否是第一个子元素,而不是结果节点集中的第一个。这应该按预期工作:

(//div[contains(concat(" ", normalize-space(@class), " "), " sub-category-wrap ")])[1]/dl/dt
于 2013-07-09T01:54:48.797 回答
2

查询//x[1]意味着/descendant-or-self::node()/child::x[1],它选择文档中每个元素的第一个 x 子元素。您想要的是(//x)[1]选择由 选择的序列中的第一个节点//x

于 2013-07-09T07:12:46.117 回答