मैं HTML चपलता पैक का उपयोग कैसे करूँ ?
मेरा XHTML दस्तावेज़ पूरी तरह से मान्य नहीं है। इसलिए मैं इसका इस्तेमाल करना चाहता था। मैं इसे अपने प्रोजेक्ट में कैसे उपयोग करूं? मेरा प्रोजेक्ट C # में है।
var body = CQ.CreateFromFile(filePath)["body"]
।
मैं HTML चपलता पैक का उपयोग कैसे करूँ ?
मेरा XHTML दस्तावेज़ पूरी तरह से मान्य नहीं है। इसलिए मैं इसका इस्तेमाल करना चाहता था। मैं इसे अपने प्रोजेक्ट में कैसे उपयोग करूं? मेरा प्रोजेक्ट C # में है।
var body = CQ.CreateFromFile(filePath)["body"]
।
जवाबों:
सबसे पहले, अपनी परियोजना में HTMLAgilityPack nuget पैकेज स्थापित करें ।
फिर, एक उदाहरण के रूप में:
HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
// There are various options, set as needed
htmlDoc.OptionFixNestedTags=true;
// filePath is a path to a file containing the html
htmlDoc.Load(filePath);
// Use: htmlDoc.LoadHtml(xmlString); to load from a string (was htmlDoc.LoadXML(xmlString)
// ParseErrors is an ArrayList containing any errors from the Load statement
if (htmlDoc.ParseErrors != null && htmlDoc.ParseErrors.Count() > 0)
{
// Handle any parse errors as required
}
else
{
if (htmlDoc.DocumentNode != null)
{
HtmlAgilityPack.HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("//body");
if (bodyNode != null)
{
// Do something with bodyNode
}
}
}
(एनबी: यह कोड केवल एक उदाहरण है और जरूरी नहीं कि सबसे अच्छा / एकमात्र तरीका हो। इसे अपने आवेदन में आँख बंद करके इस्तेमाल न करें।)
यह HtmlDocument.Load()
विधि एक स्ट्रीम को भी स्वीकार करती है जो .NET फ्रेमवर्क में अन्य स्ट्रीम ओरिएंटेड क्लासेस के साथ एकीकृत करने में बहुत उपयोगी है। जबकि HtmlEntity.DeEntitize()
HTML संस्थाओं को सही ढंग से संसाधित करने के लिए एक और उपयोगी तरीका है। (धन्यवाद मैथ्यू)
HtmlDocument
और HtmlNode
वे कक्षाएं हैं जिनका आप सबसे अधिक उपयोग करेंगे। XML पार्सर के समान, यह SelectSingleNode और SelectNodes विधियाँ प्रदान करता है जो XPath अभिव्यक्तियों को स्वीकार करते हैं।
HtmlDocument.Option??????
बूलियन गुणों पर ध्यान दें । ये नियंत्रण Load
और LoadXML
तरीके आपके HTML / XHTML को कैसे संसाधित करेंगे।
एक संकलित सहायता फ़ाइल भी है जिसे HtmlAgilityPack.chm कहा जाता है जिसमें प्रत्येक ऑब्जेक्ट के लिए एक पूर्ण संदर्भ है। यह आम तौर पर समाधान के आधार फ़ोल्डर में है।
SelectSingleNode()
लगता है कुछ समय पहले हटा दिया गया है
मुझे नहीं पता कि यह आपकी किसी मदद के लिए होगा, लेकिन मैंने कुछ लेख लिखे हैं जो मूल बातें पेश करते हैं।
अगला लेख 95% पूरा हो गया है, मुझे बस मेरे द्वारा लिखे गए कोड के पिछले कुछ हिस्सों के स्पष्टीकरण लिखना होगा। यदि आप रुचि रखते हैं तो मैं प्रकाशित होने पर यहां पोस्ट करने के लिए याद रखने की कोशिश करूंगा।
HtmlAgilityPack XPath सिंटैक्स का उपयोग करता है, और हालांकि कई तर्क देते हैं कि यह खराब रूप से प्रलेखित है, मुझे इस XPath डॉक्यूमेंटेशन की मदद से इसका उपयोग करने में कोई परेशानी नहीं हुई: https://www.w3schools.com/xml/xpath_nyntax.asp
पार्स करने के लिए
<h2>
<a href="">Jack</a>
</h2>
<ul>
<li class="tel">
<a href="">81 75 53 60</a>
</li>
</ul>
<h2>
<a href="">Roy</a>
</h2>
<ul>
<li class="tel">
<a href="">44 52 16 87</a>
</li>
</ul>
इसे मैने किया है:
string url = "http://website.com";
var Webget = new HtmlWeb();
var doc = Webget.Load(url);
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//h2//a"))
{
names.Add(node.ChildNodes[0].InnerHtml);
}
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//li[@class='tel']//a"))
{
phones.Add(node.ChildNodes[0].InnerHtml);
}
XPath
मानक पर निर्भर है । पहले यह सीखना चाहिए कि मानक और उसके बाद सब कुछ आसान हो जाएगा।
मुख्य HTMLAgilityPack संबंधित कोड इस प्रकार है
using System;
using System.Net;
using System.Web;
using System.Web.Services;
using System.Web.Script.Services;
using System.Text.RegularExpressions;
using HtmlAgilityPack;
namespace GetMetaData
{
/// <summary>
/// Summary description for MetaDataWebService
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[System.Web.Script.Services.ScriptService]
public class MetaDataWebService: System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(UseHttpGet = false)]
public MetaData GetMetaData(string url)
{
MetaData objMetaData = new MetaData();
//Get Title
WebClient client = new WebClient();
string sourceUrl = client.DownloadString(url);
objMetaData.PageTitle = Regex.Match(sourceUrl, @
"\<title\b[^>]*\>\s*(?<Title>[\s\S]*?)\</title\>", RegexOptions.IgnoreCase).Groups["Title"].Value;
//Method to get Meta Tags
objMetaData.MetaDescription = GetMetaDescription(url);
return objMetaData;
}
private string GetMetaDescription(string url)
{
string description = string.Empty;
//Get Meta Tags
var webGet = new HtmlWeb();
var document = webGet.Load(url);
var metaTags = document.DocumentNode.SelectNodes("//meta");
if (metaTags != null)
{
foreach(var tag in metaTags)
{
if (tag.Attributes["name"] != null && tag.Attributes["content"] != null && tag.Attributes["name"].Value.ToLower() == "description")
{
description = tag.Attributes["content"].Value;
}
}
}
else
{
description = string.Empty;
}
return description;
}
}
}
public string HtmlAgi(string url, string key)
{
var Webget = new HtmlWeb();
var doc = Webget.Load(url);
HtmlNode ourNode = doc.DocumentNode.SelectSingleNode(string.Format("//meta[@name='{0}']", key));
if (ourNode != null)
{
return ourNode.GetAttributeValue("content", "");
}
else
{
return "not fount";
}
}
इसे इस्तेमाल करे
string htmlBody = ParseHmlBody(dtViewDetails.Rows[0]["Body"].ToString());
private string ParseHmlBody(string html)
{
string body = string.Empty;
try
{
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);
var htmlBody = htmlDoc.DocumentNode.SelectSingleNode("//body");
body = htmlBody.OuterHtml;
}
catch (Exception ex)
{
dalPendingOrders.LogMessage("Error in ParseHmlBody" + ex.Message);
}
return body;
}