2014-01-21 4 views
0

NB -이 질문은 내가 질문 한 다른 질문과 매우 유사합니다. - Xpath Expression to select nodes based on presence of child node? - 그러나이를 확장하려고하고 있습니다.문제 해결 XPath 식을 사용하여 노드 노드를 기반으로 노드를 선택하십시오.

제품을 나열한 HTML 페이지가 있습니다.

Xpath를 사용하여 사용 가능한 제품과 매진 된 제품을 구분하려고합니다.

가능한 제품은 다음과 같이 :

<div class="product-widget-container"> 
    <article itemscope="" itemtype="http://schema.org/Product" class="product grid_4 full space omega large " data-productid="1996364" data-name="Daily Wrinkle Defence Essential Skin Reviver Cream Cleanser - 100ml" data-actual-price="5.99" data-is-available="true" data-low-stock="" data-popularity="6" data-smallimgsrc="https://staging.foo.com.au/site_media/uploads/product_image/2014/1/16/pd1996364_94d4a520-7e4a-11e3-930f-000c29c9a057_image_310x434.JPG" data-largeimgsrc="https://staging.foo.com.au/site_media/uploads/product_image/2014/1/16/pd1996364_94d4a520-7e4a-11e3-930f-000c29c9a057_image_310x434.JPG" data-sizes="[]" data-available-sizes="[]" data-categories="[119977]" data-brand="That Natural Source" data-discount="83" data-default-order="9"> 
     <figure> 
      <div class="product-img-container "> 
      <img itemprop="image" class="lazy product-img" src="https://staging.foo.com.au/site_media/uploads/product_image/2014/1/16/pd1996364_94d4a520-7e4a-11e3-930f-000c29c9a057_image_310x434.JPG" data-original="https://staging.foo.com.au/site_media/uploads/product_image/2014/1/16/pd1996364_94d4a520-7e4a-11e3-930f-000c29c9a057_image_310x434.JPG" alt="Up to 85% off Summer Looks Daily Wrinkle Defence Essential Skin Reviver Cream Cleanser - 100ml " style="display: inline;"> 
      <span class="arrow arrow-up"></span> 
      <div class="quick-buy" style="display: none;"> 
      <span class="arrow-down-trans"></span> 
      <div class="select-size"> 
      <form class="express-buy" action="/basket/add/1996364/" method="post"> 
      <input type="hidden" id="id_quantity_1996364" class="purchase-quantity" name="quantity" value="1"> 
      <input type="hidden" value="" name="addbasket.x"> 
      <span> 
      <input class="add-to-basket btn btn-primary btn-large " type="submit" value="ADD TO BASKET"> 
      </span> 
      </form> 
      </div> 
      </div> 
      </div> 
      <a itemprop="url" class="overlay-link" href="/event/outlet/up-to-off-summer-looks/1996364-daily-wrinkle-defence-essential-skin-reviver-cream-cleanser-100ml/" title="Daily Wrinkle Defence Essential Skin Reviver Cream Cleanser - 100ml"></a> 
      <figcaption> 
      <h2 itemprop="name" class="mason name"> 
      That Natural Source: Daily Wrinkle Defence Essential Skin Reviver Cream Cleanser - 100ml 
      </h2> 
      <small itemprop="brand" class="bed"> Up to 85% off Summer Looks</small> 
      <small class="bed shoes-price"> 
      $5.99 
      <del>$34.95 RRP</del> 
      <span class="discount">(83% discount)</span> 
      </small> 
      </figcaption> 
     </figure> 
    </article> 
</div> 

매진 제품은 다음과 같이 :

<div class="product-widget-container"> 
    <article itemscope="" itemtype="http://schema.org/Product" class="product grid_4 full space omega large " data-productid="1996526" data-name="#T58 When Monkeys Fly! - Oz The Great And Powerful Collection By OPI" data-actual-price="10.99" data-is-available="" data-low-stock="true" data-popularity="1" data-smallimgsrc="https://staging.foo.com.au/site_media/uploads/product_image/2014/1/16/pd1996526_d0402efe-7e4a-11e3-930f-000c29c9a057_image_310x434.jpg" data-largeimgsrc="https://staging.foo.com.au/site_media/uploads/product_image/2014/1/16/pd1996526_d0402efe-7e4a-11e3-930f-000c29c9a057_image_310x434.jpg" data-sizes="[]" data-available-sizes="[]" data-categories="[119968]" data-brand="OPI" data-discount="0" data-default-order="39"> 
     <div class="stock-status be_sprites sold-out">Sold Out</div> 
     <figure> 
      <div class="product-img-container "> 
      <img itemprop="image" class="lazy product-img" src="https://staging.foo.com.au/site_media/uploads/product_image/2014/1/16/pd1996526_d0402efe-7e4a-11e3-930f-000c29c9a057_image_310x434.jpg" data-original="https://staging.foo.com.au/site_media/uploads/product_image/2014/1/16/pd1996526_d0402efe-7e4a-11e3-930f-000c29c9a057_image_310x434.jpg" alt="Up to 85% off Summer Looks #T58 When Monkeys Fly! - Oz The Great And Powerful Collection By OPI " style="display: inline;"> 
      <span class="arrow arrow-up"></span> 
      </div> 
      <a itemprop="url" class="overlay-link" href="/event/outlet/up-to-off-summer-looks/1996526-t58-when-monkeys-fly-oz-the-great-and-powerful-collection-by-opi/" title="#T58 When Monkeys Fly! - Oz The Great And Powerful Collection By OPI"></a> 
      <figcaption> 
      <h2 itemprop="name" class="mason name"> 
      Opi: #T58 When Monkeys Fly! - Oz The Great And Powerful Collection By OPI 
      </h2> 
      <small itemprop="brand" class="bed"> Up to 85% off Summer Looks</small> 
      <small class="bed shoes-price"> 
      $10.99 
      </small> 
      </figcaption> 
     </figure> 
    </article> 
</div> 

나는이에 "매진"클래스 중 하나에 갈 수있다 생각했다, 또는 그 안에 Sold Out 텍스트가 있어야합니다.

나는 다음의 모든 시도했습니다, 그리고 그들 중 누구도 제대로 작동하지 않습니다 - 그들은 모두 나에게 제품의 전체 세트 제공 : 내 XPath를 잘못 뭘하는지에

//div[@class="product-widget-container" and not(div[@class="stock-status be_sprites sold-out"])] 

//div[@class="product-widget-container" and not(div[contains(@class, "sold-out")])] 

//div[@class="product-widget-container" and not(div[contains(., "Sold Out")])] 

어떤 생각을 표현?

건배, 빅터

답변

0

귀하의 표현이 올바른 생각을 가지고 술어에 div[]를 제거해야 노력하지만 당신은 [ ] 괄호는 중첩 할 필요가 없습니다 . 조건문을 열면 조건문에 있습니다. 작성한 모든 내용은 명령문의 일부가됩니다. 따라서 자식 노드의 속성을 검사하려면 node[child/@attribute]을 선택하기 만하면됩니다.

첫 번째 자식 노드가 아니므로 div을 확인해야합니다. div[div/@class="foo"]이라고 쓰면 <div><div class="foo"></div></div>을 확인합니다. div[.//div/@class="foo"]이라고 쓰면 <div><anything><bar><div class="foo"></div></bar></anything></div>을 확인합니다.

뭔가

같은
//div[@class="product-widget-container" and not(.//div/@class="stock-status be_sprites sold-out")] 

작동합니다!

0

//div[@class='product-widget-container' and not(@class='stock-status be_sprites sold-out')] 

당신이

관련 문제