我想使用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");
}
}
答案 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())