如何使用Xpath提取给定属性的文本值?

时间:2017-06-12 10:49:30

标签: c# xpath html-agility-pack

我想使用X路径提取content属性中的文本。

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

我只想选择&#34;足球,板球,橄榄球,排球&#34;

我正在使用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");
            }
        }

2 个答案:

答案 0 :(得分:1)

使用HTML Agility Pack,您可以使用doc.SelectSingleNode("/html/head/meta[@name = 'keywords']").Attributes["content"].Value。我认为他们对属性节点的XPath支持有点奇怪,因此最好选择元素,然后使用Attributes属性选择属性,并使用Value属性来提取值。如果要使用纯XPath将属性值作为字符串获取,请使用doc.CreateNavigator().Evaluate("string(/html/head/meta[@name = 'keywords']/@content)")

答案 1 :(得分:0)

您可以使用string()来获取值:

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