2017-06-12 1 views
0

Je souhaite extraire le texte dans l'attribut de contenu en utilisant le chemin X.Comment extraire les valeurs de texte d'un attribut donné en utilisant Xpath?

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

Je veux sélectionner que "le football, le cricket, le rugby, volley-ball"

J'utilise C#, htmlagilitypack.

C'est ainsi que j'ai supposé faire cela. Mais cela n'a pas fonctionné.

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

Quelle erreur obtenez-vous –

+0

Je n'ai pas eu d'erreur. Je veux obtenir seulement les valeurs d'attribut, mais cela me donne le nom de l'attribut avec le nom de l'étiquette.

+1

'doc.DocumentNode.SelectSingleNode (" // head/meta [@ name = 'keywords'] ") ?. Attributs [" content " ]?. Valeur – spender

Répondre

1

Avec HTML Agility Pack Vous pouvez utiliser doc.SelectSingleNode("/html/head/meta[@name = 'keywords']").Attributes["content"].Value. Je pense que leur support XPath pour les nœuds d'attribut est un peu bizarre, il est donc préférable de sélectionner l'élément, puis d'utiliser la propriété Attributes pour sélectionner l'attribut et la propriété Value pour extraire la valeur. Si vous souhaitez utiliser XPath pur pour obtenir la valeur de l'attribut sous forme de chaîne, utilisez doc.CreateNavigator().Evaluate("string(/html/head/meta[@name = 'keywords']/@content)").

0

Vous pouvez utiliser la chaîne() pour obtenir juste la valeur:

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