2013-08-12 6 views
12

मैं div से पाठ प्राप्त करने का प्रयास कर रहा हूं जहां कक्षा = 'समीक्षा-पाठ', निम्नलिखित HTML (समान संरचना) के साथ PHP के DOM तत्व का उपयोग करके और निम्नलिखित कोडPHP डीओएम दस्तावेज़ का उपयोग करके, अपनी कक्षा द्वारा एचटीएमएल तत्व का चयन करने के लिए और अपना पाठ

हालांकि इस काम करने के लिए प्रतीत नहीं होता

  1. एचटीएमएल

    $html = ' 
        <div class="page-wrapper"> 
         <section class="page single-review" itemtype="http://schema.org/Review" itemscope="" itemprop="review"> 
          <article class="review clearfix"> 
           <div class="review-content"> 
            <div class="review-text" itemprop="reviewBody"> 
            Outstanding ... 
            </div> 
           </div> 
          </article> 
         </section> 
        </div> 
    '; 
    
  2. पीएचपी कोड

    $classname = 'review-text'; 
        $dom = new DOMDocument; 
        $dom->loadHTML($html); 
        $xpath  = new DOMXPath($dom); 
        $results = $xpath->query("//*[@class and contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]"); 
    
        if ($results->length > 0) { 
         echo $review = $results->item(0)->nodeValue; 
        } 
    

कक्षा द्वारा तत्व का चयन करने के लिए XPATH वाक्यविन्यास इस Blog

पर मैंने स्टैक ओवरव्लो, ऑनलाइन ट्यूटोरियल से कई उदाहरणों का प्रयास किया है, लेकिन कोई भी काम नहीं करता है। क्या मैं कुछ भूल रहा हूँ ?

+1

'// div [शामिल है (@class, 'review-text')]' –

उत्तर

24

निम्न XPath क्वेरी जो आप चाहते हैं वह करता है। आप http://www.xpathtester.com/test पर अपनी खुद की XPath क्वेरी के ऑनलाइन परीक्षण कर सकते हैं, आसान विकास के लिए : बस $ xpath- लिए प्रदान की जाती तर्क> क्वेरी निम्नलिखित के साथ बदलें:

//div[@class="review-text"] 

संपादित करें।

संपादित 2: इस कोड का परीक्षण किया गया; यह पूरी तरह से काम किया।

<?php 

$html = ' 
    <div class="page-wrapper"> 
     <section class="page single-review" itemtype="http://schema.org/Review" itemscope="" itemprop="review"> 
      <article class="review clearfix"> 
       <div class="review-content"> 
        <div class="review-text" itemprop="reviewBody"> 
        Outstanding ... 
        </div> 
       </div> 
      </article> 
     </section> 
    </div> 
'; 

$classname = 'review-text'; 
$dom = new DOMDocument; 
$dom->loadHTML($html); 
$xpath = new DOMXPath($dom); 
$results = $xpath->query("//*[@class='" . $classname . "']"); 

if ($results->length > 0) { 
    echo $review = $results->item(0)->nodeValue; 
} 

?> 
+0

मैंने आपकी XPath क्वेरी का प्रयास किया है, जो कि काम नहीं करता है। क्या XPath क्वेरी करने से पहले समस्या कोड सिंटैक्स के साथ झूठ बोलती है। –

+0

क्या PHP आपको कोई त्रुटि देता है? –

4

Frak Houweling जवाब पर विस्तार, यह भी संभव एक विशिष्ट DomNode भीतर खोज करने के DomXpath उपयोग करने के लिए है।

$dom = new DOMDocument; 
$dom->loadHTML ($html); 
$xpath = new DOMXPath ($dom); 

foreach ($xpath->query ("//section[@class='page single-review']") as $section) 
{ 
    // search for sub nodes inside each element 
    foreach ($xpath->query (".//div[@class='review-text']", $section) as $review) 
    { 
     echo $review->nodeValue; 
    } 
} 

ध्यान दें कि जब अंदर नोड्स खोज आप अभिव्यक्ति की शुरुआत में एक डॉट . जोड़कर संबंधित पथ उपयोग करने की आवश्यकता:

यह DomXpath->query पद्धति के लिए एक दूसरा तर्क के रूप में contextNode पास करके प्राप्त किया जा सकता
"//div[@class='review-text']" // absolute path, search starts from the root element 
".//div[@class='review-text']" // relative path, search starts from the provided contextNode 
संबंधित मुद्दे