2009-02-12 13 views
8

मैं एचटीएमएल चपलता पैक और यह xpath का उपयोग कर एक HTML दस्तावेज़ से किसी विशिष्ट छवि प्राप्त करने का प्रयास कर रहा हूँ,:चयन विशेषता एचटीएमएल चपलता पैक के साथ महत्व देता

//div[@id='topslot']/a/img/@src 

जहां तक ​​मैं देख सकता हूँ, यह src पाता है - योगदान, लेकिन यह आईएमजी टैग देता है। ऐसा क्यों है?

मैं इनर एचटीएमएल/इनरटेक्स्ट या कुछ सेट करने की अपेक्षा करता हूं, लेकिन दोनों खाली तार हैं। OuterHtml पूर्ण img-टैग पर सेट है।

क्या एचटीएमएल एजिलिटी पैक के लिए कोई दस्तावेज है?

उत्तर

11

एचटीएमएल एजिलिटी पैक does not support विशेषता चयन।

+5

मैंने अभी इसे सभी divs चुनने के लिए उपयोग किया है जहां विशेषता संरेखण केंद्र पर सेट है। "// div [@ align = 'center']" – clamchoda

+0

थोड़ा कामकाज के साथ यह संभव है, कृपया नीचे मेरा उत्तर देखें। –

15

आप सीधे विशेषता हड़पने अगर आप HtmlNavigator बजाय उपयोग कर सकते हैं।

//Load document from some html string 
HtmlDocument hdoc = new HtmlDocument(); 
hdoc.LoadHtml(htmlContent); 

//Load navigator for current document 
HtmlNodeNavigator navigator = (HtmlNodeNavigator)hdoc.CreateNavigator(); 

//Get value from given xpath 
string xpath = "//div[@id='topslot']/a/img/@src"; 
string val = navigator.SelectSingleNode(xpath).Value; 
+1

हालांकि यह विशेषता के मान को पढ़ने के लिए काम करता है, इसे संशोधित करना संभव नहीं है। चयनित विशेषता नोड पर '.SetValue ("new_value") को कॉल करना 'System.NotSupportedException' फेंकता है क्योंकि' HtmlNodeNavigator' ** केवल पढ़ने के लिए ** है। – Andre

+0

क्या यह उत्तर स्वीकृत उत्तर के लिए प्रत्यक्ष विरोधाभास नहीं है (संशोधन प्रश्न का हिस्सा नहीं था)? –

+0

@ डेविड।मुझे लगता है कि ओपी ने इसे स्विच करने पर कभी भी परेशान नहीं किया क्योंकि मैंने लगभग 4 साल बाद यह जवाब जोड़ा था –

7

आप विधि "GetAttributeValue" का उपयोग कर सकते हैं।

उदाहरण:

//[...] code before needs to load a html document 
HtmlAgilityPack.HtmlDocument htmldoc = e.Document; 
//get all nodes "a" matching the XPath expression 
HtmlNodeCollection AllNodes = htmldoc.DocumentNode.SelectNodes("*[@class='item']/p/a"); 
//show a messagebox for each node found that shows the content of attribute "href" 
foreach (var MensaNode in AllNodes) 
{ 
    string url = MensaNode.GetAttributeValue("href", "not found"); 
    MessageBox.Show(url); 
} 
1

पठन और लेखन एचटीएमएल चपलता पैक

आप दोनों पढ़ सकते हैं और HtmlAgilityPack में विशेषताओं सेट कर सकते हैं के साथ गुण। यह उदाहरण < html> टैग का चयन करता है और यदि यह मौजूद है तो 'lang' (भाषा) विशेषता का चयन करता है और फिर 'लैंग' विशेषता को पढ़ता है और लिखता है।

नीचे दिए गए उदाहरण में, doc.LoadHtml (this.All), "this.All" एक HTML दस्तावेज़ का स्ट्रिंग प्रस्तुति है।

पढ़ने और लिखने:

  HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
      doc.LoadHtml(this.All); 
      string language = string.Empty; 
      var nodes = doc.DocumentNode.SelectNodes("//html"); 
      for (int i = 0; i < nodes.Count; i++) 
      { 
       if (nodes[i] != null && nodes[i].Attributes.Count > 0 && nodes[i].Attributes.Contains("lang")) 
       { 
        language = nodes[i].Attributes["lang"].Value; //Get attribute 
        nodes[i].Attributes["lang"].Value = "en-US"; //Set attribute 
       } 
      } 

केवल पढ़ें:

  HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
      doc.LoadHtml(this.All); 
      string language = string.Empty; 
      var nodes = doc.DocumentNode.SelectNodes("//html"); 
      foreach (HtmlNode a in nodes) 
      { 
       if (a != null && a.Attributes.Count > 0 && a.Attributes.Contains("lang")) 
       { 
        language = a.Attributes["lang"].Value; 
       } 
      } 
0

मैं एक छवि के गुण प्राप्त करने के लिए निम्नलिखित तरीके से इस्तेमाल किया।

var MainImageString = MainImageNode.Attributes.Where(i=> i.Name=="src").FirstOrDefault(); 

आप अपना मूल्य प्राप्त करने के लिए विशेषता नाम निर्दिष्ट कर सकते हैं; यदि आप विशेषता नाम नहीं जानते हैं, तो नोड लाने के बाद ब्रेकपॉइंट दें और इसके गुणों को इसके ऊपर घुमाकर देखें।

आशा है कि मैंने मदद की।

संबंधित मुद्दे