मैं वर्तमान में एक निश्चित स्ट्रिंग प्राप्त करने के लिए एक वेबपृष्ठ को पार्स करने का प्रयास कर रहा हूं:

<script type="text/javascript" src="./interceptor/resource/org.apache.wicket.resource.JQueryResourceReference/jquery/jquery-3.4.1-ver-220AFD743D9E9643852E31A135A9F3AE.js?requestSecurityToken=610f15bd-0e23-4ac5-90c3-c0829ad8024e"></script>

यह वह कोड है जिसके साथ मैं वेब पेज लोड करने के लिए आया था:

using (HttpClient http = new HttpClient())
{               
    var response = await http.GetStringAsync(pagelink);
    Console.WriteLine(response);
    HtmlDocument pageDocument = new HtmlDocument();
    pageDocument.LoadHtml(response);

    var token = pageDocument.DocumentNode.SelectSingleNode("").InnerText;
    Console.WriteLine(token);
}

मुद्दा यह है कि मुझे उस स्ट्रिंग से प्राप्त करने की आवश्यकता है जिसका मैंने पहले उल्लेख किया था केवल टोकन: 610f15bd-0e23-4ac5-90c3-c0829ad8024e

मुझे लगता है कि इसे करने का एक तरीका होना चाहिए, लेकिन मैं Xpath के साथ भी सफल नहीं हो सकता। तो मैं सोच रहा था कि उदाहरण के लिए तैयार स्ट्रिंग से इसे पार्स करने का कोई तरीका है या नहीं:

लेफ्ट स्ट्रिंग: requestSecurityToken= दायां तार: ></script>

1
Villette Grandpe 27 पद 2020, 13:13

3 जवाब

सबसे बढ़िया उत्तर

रेगेक्स के साथ मिलाने से आसान तरीका

मुझे नहीं लगता था कि यह इतना कठिन था..

var regex = @"\b[a-f0-9]{8}(?:-[a-f0-9]{4}){3}-[a-f0-9]{12}\b";
var m = Regex.Match(html, regex);
Console.WriteLine(m.Value);

यदि आप केवल requestSecurityToken= का अनुसरण करने वाली एक गाइड निकालना चाहते हैं, तो आप यह कर सकते हैं:

var regex = @"requestSecurityToken=([a-f0-9]{8}(?:-[a-f0-9]{4}){3}-[a-f0-9]{12})";
var m = Regex.Match(html, regex);
Console.WriteLine(m.Groups[1].Value);
2
Caius Jard 27 पद 2020, 15:34

कुछ इस तरह का प्रयास करें:

string html = @"<script type=""text/javascript"" src=""./interceptor/resource/org.apache.wicket.resource.JQueryResourceReference/jquery/jquery-3.4.1-ver-220AFD743D9E9643852E31A135A9F3AE.js?requestSecurityToken=610f15bd-0e23-4ac5-90c3-c0829ad8024e""></script>";

// use something to extract value of the src attribute
// I'll use XDocument, but it is not good for HTML documents
XDocument xdoc = XDocument.Parse( html );
string src = xdoc.Root.Attribute("src")?.Value;

if (src is null) throw new Exception();

string[] splitted = src.Split("?");
string queryString = splitted[1]; //"requestSecurityToken=610f15bd-0e23-4ac5-90c3-c0829ad8024e"

// using System.Collections.Specialized;
NameValueCollection parsed = HttpUtility.ParseQueryString( queryString );

Console.WriteLine(parsed["requestSecurityToken"]);
1
apocalypse 27 पद 2020, 14:00

रेगेक्स या स्ट्रिंग विभाजन के बिना मेरा लेना:

// as already noted, XElement or XDocument may not be the best choice for handling Html
var xe = XElement.Parse(response);

// XPath will make sure you are looking at the right script element
var src = xe.XPathSelectElement("//script[contains(@src, 'requestSecurityToken')]").Attribute("src").Value;

// since relative uri don't support parsing its query, you need to stick in a pseudo base uri
Uri srcuri = new Uri(new Uri("http://localhost"), src);

// finally get the value by name
string token = System.Web.HttpUtility.ParseQueryString(srcuri.Query).Get("requestSecurityToken");
0
Filburt 27 पद 2020, 14:45