2017-06-12 77 views
0

我想使用X路徑提取內容屬性中的文本。如何使用Xpath提取給定屬性的文本值?

<meta name="keywords" content="football,cricket,Rugby,Volleyball"> 

我只需要選擇 「足球,板球,橄欖球,排球」

我使用C#,htmlagilitypack。

這是我應該這樣做的,但它沒有工作。

private void scrapBtn_Click(object sender, EventArgs e) 
     { 
      string url = urlTextBox.Text; 
      HtmlWeb web = new HtmlWeb(); 
      HtmlAgilityPack.HtmlDocument doc = web.Load(url); 


       try 
      { 
       var node = doc.DocumentNode.SelectSingleNode("//head/title/text()"); 
       var node1 = doc.DocumentNode.SelectSingleNode("//head/meta[@name='DESCRIPTION']/@content"); 

       try 
       { 
        label4.Text = "Title:"; 
        label4.Text += "\t"+node.Name.ToUpper() + ": " + node.OuterHtml; 
       } 
       catch (NullReferenceException) 
       { 
        MessageBox.Show(url + "does not contain <Title>", "Oppz, Sorry"); 
       } 

       try 
       { 
        label4.Text += "\nMeta Keywords:"; 
        label4.Text += "\n\t" + node1.Name.ToUpper() + ": " + node1.OuterHtml; 
       } 
       catch (NullReferenceException) 
       { 
        MessageBox.Show(url + "does not contain <meta='Keywords'>", "Oppz, Sorry"); 
       } 

      } 
      catch(Exception ex){ 
       MessageBox.Show(ex.StackTrace, "Oppz, Sorry"); 
      } 
     } 
+0

你得到什麼錯誤 –

+0

我沒有得到錯誤。我只想獲取屬性值,但它給了我帶有標籤名稱的屬性名稱。

+1

'doc.DocumentNode.SelectSingleNode(「// head/meta [@ name ='keywords']」)?. Attributes [「content」 ]?Value' – spender

回答

1

使用HTML敏捷性包,你可以使用doc.SelectSingleNode("/html/head/meta[@name = 'keywords']").Attributes["content"].Value。我認爲他們對屬性節點的XPath支持有點奇怪,所以最好選擇元素,然後使用Attributes屬性選擇屬性,並使用Value屬性來提取值。如果您想使用純XPath以字符串形式獲取屬性值,請使用doc.CreateNavigator().Evaluate("string(/html/head/meta[@name = 'keywords']/@content)")

0

您可以使用字符串()得到公正的價值:

string(//head/meta[@name]/@content/text())