दिलचस्प पोस्ट
मॉडल प्रकार-सुरक्षित enum प्रकार कैसे करें? Android में खारिज या रद्द किए जाने वाले संवाद में क्या अंतर है? एंड्रॉइड में पारदर्शी पृष्ठभूमि के साथ संवाद पाठ दस्तावेज़ों के बीच डुप्लिकेट्स को कैसे पता लगाया जाता है और डुप्लिकेट्स समानता लौटाता है? ख अक्ष के रूप में आर (ggplot2) में रैखांकित बार चार्ट और गणना के रूप में प्रतिशत आईओएस: एक एप के अंदर यूज़रनेम / पासवर्ड कैसे स्टोर किया जाए? सबस्ट्रिंग प्राप्त करें – कुछ खास चारों ओर सब कुछ NSMutableString के साथ एक फाइल के अंत में संलग्न जावा: असली दुनिया में डबल की बजाए हमें बिगडेकल का उपयोग क्यों करना चाहिए? कैसे रनटाइम में WPF छवि को लोड करने के लिए? जावा एप्लेट गेम 2 डी विंडो स्क्रॉलिंग मैं शैल स्क्रिप्ट्स में $ PATH तत्वों को हेरफेर कैसे करूं? Angular2 – घटक में मॉड्यूल.आईडी के क्या अर्थ हैं? Jquery कोड को जावास्क्रिप्ट में बदलने का एक आसान तरीका है? क्या आप अपने वाणिज्यिक जावा कोड को अस्पष्ट करते हैं?

एचटीएमएल चपलता पैक – पार्सिंग टेबल

मैं जटिल वेब पृष्ठों से तालिकाओं को पार्स करने के लिए HTML ऐगिलिटी पैक का उपयोग करना चाहता हूं, लेकिन मैं ऑब्जेक्ट मॉडल में किसी तरह खो गया हूं

मैंने लिंक उदाहरण को देखा, लेकिन इस तरह से कोई भी तालिका डेटा नहीं मिला। क्या मैं टेस्ट पाने के लिए XPath का उपयोग कर सकता हूं? तालिकाओं को प्राप्त करने के तरीके के रूप में डेटा को लोड करने के बाद मैं मूलतः खो गया हूं मैंने इससे पहले पर्ल में यह किया है और यह थोड़ा अनाड़ी था, लेकिन काम किया ( HTML::TableParser )।

मैं भी खुश हूं अगर कोई पार्सिंग के लिए सही ऑब्जेक्ट ऑर्डर पर प्रकाश डाल सकता है।

Solutions Collecting From Web of "एचटीएमएल चपलता पैक – पार्सिंग टेबल"

कैसे के बारे में कुछ की तरह: एचटीएमएल चपलता पैक का उपयोग करना

 HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(@"<html><body><p><table id=""foo""><tr><th>hello</th></tr><tr><td>world</td></tr></table></body></html>"); foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table")) { Console.WriteLine("Found: " + table.Id); foreach (HtmlNode row in table.SelectNodes("tr")) { Console.WriteLine("row"); foreach (HtmlNode cell in row.SelectNodes("th|td")) { Console.WriteLine("cell: " + cell.InnerText); } } } 

ध्यान दें कि यदि आप चाहें तो इसे LINQ-to-Objects के साथ सुंदर बना सकते हैं:

 var query = from table in doc.DocumentNode.SelectNodes("//table").Cast<HtmlNode>() from row in table.SelectNodes("tr").Cast<HtmlNode>() from cell in row.SelectNodes("th|td").Cast<HtmlNode>() select new {Table = table.Id, CellText = cell.InnerText}; foreach(var cell in query) { Console.WriteLine("{0}: {1}", cell.Table, cell.CellText); } 

एक विशेष तत्व के लिए XPath को प्राप्त करने के लिए मैंने जो सबसे सरल पाया है, फ़ायरफ़ॉक्स के लिए फायरबॉन्ग एक्सटेंशन को स्थापित करने के लिए साइट / वेबपेज पर जाएं, फायरबग को लाने के लिए F12 दबाएं; सही पृष्ठ पर मौजूद तत्व को चुनें और ठीक क्लिक करें और "तत्व का निरीक्षण करें" चुनें Firebug इसके IDE में तत्व का चयन करेगा, फिर एलीमेंट इन फायरबग पर राइट क्लिक करें और "XPath कॉपी करें" चुनें, इस फ़ंक्शन से आपको सटीक XPath प्रश्न आपको HTML एगिलिटी लाइब्रेरी का उपयोग करना चाहते हैं।

ऊपर दिए गए उत्तर से रेखा:

 HtmlDocument doc = new HtmlDocument(); 

यह वीएस 2015 सी # में काम नहीं करता है आप किसी भी अधिक HtmlDocument निर्माण नहीं कर सकते।

एक अन्य एमएस "फीचर" जो चीजों को और अधिक कठिन बना देता है HtmlAgilityPack.HtmlWeb आज़माएं और कुछ नमूना कोड के लिए इस लिंक को देखें।

मेरे मामले में, एक मेज है जो एक राउटर से डिवाइस की सूची बनती है। यदि आप उपरोक्त उल्लिखित मैट्रिक्स के बजाय टीआर / टीएच / टीडी (पंक्ति, हैडर, डेटा) का उपयोग करके तालिका पढ़ना चाहते हैं, तो आप निम्न की तरह कुछ कर सकते हैं:

  List<TableRow> deviceTable = (from table in document.DocumentNode.SelectNodes(XPathQueries.SELECT_TABLE) from row in table?.SelectNodes(HtmlBody.TR) let rows = row.SelectSingleNode(HtmlBody.TR) where row.FirstChild.OriginalName != null && row.FirstChild.OriginalName.Equals(HtmlBody.T_HEADER) select new TableRow { Header = row.SelectSingleNode(HtmlBody.T_HEADER)?.InnerText, Data = row.SelectSingleNode(HtmlBody.T_DATA)?.InnerText}).ToList(); } 

TableRow हेडर और डेटा के साथ गुणों के रूप में सिर्फ एक सरल ऑब्जेक्ट है। दृष्टिकोण निरर्थक और इस मामले का ख्याल रखता है:

 <tr> <td width="28%">&nbsp;</td> </tr>