मेरे पास एक HTML फ़ाइल है जिसमें बहुत से जस्ट "ली" टैग हैं जिनमें कोई हेड और बॉडी टैग नहीं है और कुछ भी है। मैं उन्हें PHP का उपयोग करके गिनना चाहता हूं। मैं यह कैसे कर सकता हूं?
हालांकि, मैंने यह कोशिश की:
$dom = new DOMDocument();
DOMDocument::loadHTML($tmp_file);
$count = $dom->getElementsByTagName("li");
echo count($count);
लेकिन यह 1 लौटाता है।
यहां $tmp_file है (मुझे नहीं पता कि उनमें से कितने पुनर्प्राप्त किए जाएंगे (उनमें से सौ हो सकते हैं) लेकिन मैं उनमें से केवल 5 को यहां जोड़ता हूं):
<li >
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426832/میروسلاو-ژیوکو-سرمربی-تیم-والیبال-سایپا-شد" target="_blank" title="میروسلاو ژیوکو سرمربی تیم والیبال سایپا شد">میروسلاو ژیوکو سرمربی تیم والیبال سایپا شد</a>
</li>
<li >
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426824/فدرر-از-نظر-فیزیکی-شرایط-سال-قبل-را-ندارم" target="_blank" title="فدرر: از نظر فیزیکی شرایط سال قبل را ندارم">فدرر: از نظر فیزیکی شرایط سال قبل را ندارم</a>
</li>
<li >
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426817/شکست-تیم-«الف»-والیبال-ساحلی-ایران-مقابل-هلند" target="_blank" title="شکست تیم «الف» والیبال ساحلی ایران مقابل هلند">شکست تیم «الف» والیبال ساحلی ایران مقابل هلند</a>
</li>
<li class="news-video">
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426815/5-حرکت-دیدنی-در-لیگ-تابستان-NBA؛-96-04-21" target="_blank" title="5 حرکت دیدنی در لیگ تابستان NBA؛ 96/04/21">5 حرکت دیدنی در لیگ تابستان NBA؛ 96/04/21</a>
</li>
<li >
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426813/معرفی-هیات-مدیره-جدید-صندوق-حمایت-از-پیشکسوتان" target="_blank" title="معرفی هیات مدیره جدید صندوق حمایت از پیشکسوتان">معرفی هیات مدیره جدید صندوق حمایت از پیشکسوتان</a>
</li>
<li >
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426808/رحیمی،-یزدانی-و-قاسمی-در-رده-اول-تا-سوم-جهان" target="_blank" title="رحیمی، یزدانی و قاسمی در رده اول تا سوم جهان">رحیمی، یزدانی و قاسمی در رده اول تا سوم جهان</a>
</li>
<li >
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426792/جوکوویچ-منتظر-رویارویی-با-بردیچ-هستم" target="_blank" title="جوکوویچ: منتظر رویارویی با بردیچ هستم">جوکوویچ: منتظر رویارویی با بردیچ هستم</a>
</li>
12 जवाब
उस मुद्दे का मुद्दा यह था कि मैं सिर्फ एक टैग हासिल करना चाहता हूं और उनके लिंक को पकड़ना चाहता हूं, और मैं सिर्फ पार्सिंग का उपयोग करना चाहता हूं, लेकिन कभी-कभी आपको अपने इंटेल i9 का उपयोग अपने दिमाग में करना चाहिए और बेहतर सोचना चाहिए, इसलिए <li>
टैग मैंने सीधे <a>
टैग को लक्षित किया, और यह काम करता है:
यहाँ कोड है:
$this->dom = new DOMDocument();
@$this->dom->loadHTMLfile($tmp_file);
$this->as = $this->dom->getElementsByTagName('a');
foreach($this->as as $a) { ...
और चूंकि इनमें से प्रत्येक आइटम डेटाबेस में सहेजा गया था, तो मैं डेटाबेस से MySQL प्रश्नों के साथ उनकी गिनती नहीं कर सकता, बस!
तुम करीब हो। मुझे लगता है कि आप जो खोज रहे हैं वह निम्नलिखित है:
$dom = new \DOMDocument();
@$dom->loadHTML($html); // or @$dom->loadHTMLFile($filename); if providing filename rather than actual HTML content
$count = $dom->getElementsByTagName('li')->length;
echo $count;
$tmp_file
के आपके मूल्य के आधार पर आप या तो loadHTML()
का उपयोग करेंगे अगर इसमें वास्तविक सामग्री है, या loadHTMLFile()
a> यदि इसमें फ़ाइल नाम है। (ध्यान दें कि इन विधियों को स्थिर रूप से नहीं कहा जाना चाहिए।)
विधि getElementsByTagName()
एक DOMNodeList
एक length
प्रॉपर्टी के साथ ऑब्जेक्ट जिसमें पाए गए नोड्स की संख्या है।
आप यहां कोड आज़मा सकते हैं।
यह DOM पार्सिंग दृष्टिकोण स्ट्रिंग या रेगुलर एक्सप्रेशन खोजों के लिए बेहतर है क्योंकि इसे HTML को स्वीकार्य रूप से लिखे जाने वाले कई चर तरीकों (यानी असंगत रिक्ति, विशेषता क्रम) के लिए डिज़ाइन किया गया है।
आप उस स्ट्रिंग पर <li>
(या -li-) के लिए एक बहुत ही सरल Substring Count
कर सकते हैं और यह आइटमों की संख्या लौटाएगा। यहां देखें: function.substr-count
$count = substr_count($html,'<li>'); //where $html holds your piece of HTML.
आप करीब थे।
ये कोशिश करें:
$count = $dom->getElementsByTagName("li")->length;
और इसे echo count($count);
से echo $count
में बदलें
ठीक है, सबसे पहले, लोड HTML एक स्ट्रिंग के अंदर एक HTML से लोड होता है। यदि $tmp_file फ़ाइल का नाम है, तो आपको loadHTMLFile का उपयोग करना चाहिए।
साथ ही, लोडएचटीएमएल स्थिर नहीं है, इसलिए आपको $dom->loadHTML($tmp_file);
करने की आवश्यकता है
अब सवाल का जवाब।
क्या getElementsByTagName()
रिटर्न एक DOMNodeList है। एक वस्तु के रूप में, शायद count()
फ़ंक्शन केवल 1 कहेगा, लेकिन DOMNodeList में length
नामक एक संपत्ति है। यदि आप केवल li
तत्वों को क्वेरी करते हैं और फिर length
पढ़ते हैं तो यह li
तत्वों की मात्रा देगा।
एक परीक्षण के रूप में:
$dom = new DOMDocument();
$dom->loadHTML("<li>test 1</li><li>test 2</li><li>test 3</li><li>test 4</li>");
$count = $dom->getElementsByTagName("li");
echo $count->length; //Prints 4
<ul>
के अंदर मैंने चार <li>
एलिमेंट सेट किए हैं।
क्या आप ऐसा कुछ करने की कोशिश कर सकते हैं? $url
आपकी html फ़ाइल का पथ है?
$data = file($url);
$count = null;
foreach($data as $line){
if (strpos($line,'<li')){
++$count;
}
}
echo($count);
exit();
यदि आप सुनिश्चित हैं कि सभी लाइनें समान हैं, तो आपको <li>
टैग की जांच करने की भी आवश्यकता नहीं है। बस फ़ाइल में पंक्तियों की संख्या की एक त्वरित गणना करें और 3 से विभाजित करें:
$total_lines = count(file($html_file));
$num_list_items = $total_lines / 3;
$html_file फ़ाइल का पथ होना चाहिए। आपको HTML को पार्स करने की आवश्यकता नहीं है, इसलिए कोई नया DOMDocument बनाने की आवश्यकता नहीं है। यह बहुत अधिक कुशल है, लेकिन केवल तभी जब आप सुनिश्चित रूप से जानते हों कि पूरी फ़ाइल इस तरह से स्वरूपित है।
एचटीएमएल पेज डेटा से li
गिनती प्राप्त करने के लिए आप बस निम्न कोड का उपयोग करें
$html_page_data='<li >
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426832/میروسلاو-ژیوکو-سرمربی-تیم-والیبال-سایپا-شد" target="_blank" title="میروسلاو ژیوکو سرمربی تیم والیبال سایپا شد">میروسلاو ژیوکو سرمربی تیم والیبال سایپا شد</a>
</li>
<li >
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426824/فدرر-از-نظر-فیزیکی-شرایط-سال-قبل-را-ندارم" target="_blank" title="فدرر: از نظر فیزیکی شرایط سال قبل را ندارم">فدرر: از نظر فیزیکی شرایط سال قبل را ندارم</a>
</li>
<li >
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426817/شکست-تیم-«الف»-والیبال-ساحلی-ایران-مقابل-هلند" target="_blank" title="شکست تیم «الف» والیبال ساحلی ایران مقابل هلند">شکست تیم «الف» والیبال ساحلی ایران مقابل هلند</a>
</li>';
$doc = new DOMDocument();
$doc->loadHTML($html_page_data);
libxml_clear_errors();
$xpath = new DOMXPath($doc);
$query = '//li'; //query pattern for find li
$li_data= $xpath->query($query);
echo $li_data->length ; //output 3
आप भी उपयोग कर सकते हैं:
echo preg_match_all("~<li([^>]*)>~",file_get_contents("your_html_file")).PHP_EOL;
परीक्षा के परिणाम :
akshay@db-3325:/tmp$ cat file
<li >
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426832/میروسلاو-ژیوکو-سرمربی-تیم-والیبال-سایپا-شد" target="_blank" title="میروسلاو ژیوکو سرمربی تیم والیبال سایپا شد">میروسلاو ژیوکو سرمربی تیم والیبال سایپا شد</a>
</li>
<li >
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426824/فدرر-از-نظر-فیزیکی-شرایط-سال-قبل-را-ندارم" target="_blank" title="فدرر: از نظر فیزیکی شرایط سال قبل را ندارم">فدرر: از نظر فیزیکی شرایط سال قبل را ندارم</a>
</li>
<li >
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426817/شکست-تیم-«الف»-والیبال-ساحلی-ایران-مقابل-هلند" target="_blank" title="شکست تیم «الف» والیبال ساحلی ایران مقابل هلند">شکست تیم «الف» والیبال ساحلی ایران مقابل هلند</a>
</li>
<li class="news-video">
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426815/5-حرکت-دیدنی-در-لیگ-تابستان-NBA؛-96-04-21" target="_blank" title="5 حرکت دیدنی در لیگ تابستان NBA؛ 96/04/21">5 حرکت دیدنی در لیگ تابستان NBA؛ 96/04/21</a>
</li>
<li >
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426813/معرفی-هیات-مدیره-جدید-صندوق-حمایت-از-پیشکسوتان" target="_blank" title="معرفی هیات مدیره جدید صندوق حمایت از پیشکسوتان">معرفی هیات مدیره جدید صندوق حمایت از پیشکسوتان</a>
</li>
<li >
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426808/رحیمی،-یزدانی-و-قاسمی-در-رده-اول-تا-سوم-جهان" target="_blank" title="رحیمی، یزدانی و قاسمی در رده اول تا سوم جهان">رحیمی، یزدانی و قاسمی در رده اول تا سوم جهان</a>
</li>
<li >
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426792/جوکوویچ-منتظر-رویارویی-با-بردیچ-هستم" target="_blank" title="جوکوویچ: منتظر رویارویی با بردیچ هستم">جوکوویچ: منتظر رویارویی با بردیچ هستم</a>
</li>
akshay@db-3325:/tmp$ php -r 'echo preg_match_all("~<li([^>]*)>~",file_get_contents("file")).PHP_EOL;'
7
यह मेरे लिए काम करता है (अपना उदाहरण HTML को "index.html" नामक फ़ाइल में डालकर):
<?php
$dom = new DOMDocument();
$dom->loadHTMLFile("index.html");
$count = $dom->getElementsByTagName("li");
printf("Count: %d\n", count($count));
संपादित करें: हालांकि, जैसा कि कहा गया है, आप count()
को छोड़ सकते हैं:
$li_elems = $dom->getElementsByTagName("li");
printf("Count: %d\n", $li_elems->length);
आप PHP सरल HTML डोम पार्स का उपयोग कर सकते हैं: http://simplehtmldom.sourceforge.net/
echo count($html->find('li'));
मैं आपकी मदद कर सकता हूं।
आपको इस कोड का उपयोग करना चाहिए:
$numberOfListItems= $domElement->getElementsByTagName("li")->length;
$numberOfListItems में आवश्यक मान शामिल है
संबंधित सवाल
नए सवाल
php
PHP एक व्यापक रूप से उपयोग किया जाता है, उच्च-स्तरीय, गतिशील, वस्तु-उन्मुख, और व्याख्या की गई स्क्रिप्टिंग भाषा मुख्य रूप से सर्वर-साइड वेब विकास के लिए डिज़ाइन की गई है। PHP भाषा के बारे में सवालों के लिए इस्तेमाल किया।