我实际上是试图从带有一些子标签的标签中抓取文本
例如:
<p><span>Child Text </span><span class="price">Child Text</span><br />
I need this text</p>
这就是我正在尝试的
HtmlElement menuElement = browser.Document.GetElementsByTagName("p");
String mytext = menuElement.InnerHtml; //also tried innerText,OuterHtml,OuterText
更新:我想我必须使用Htmlagilitypack,所以现在我的问题是如何使用htmlagilitypack lib来做到这一点,我是新手。
谢谢
答案 0 :(得分:2)
使用正则表达式到网络报废库有很多方法。我建议您使用htmlagilitypack,您可以准确地解决xpath所需的问题。 添加引用和命名空间到HtmlAgilityPack并且我使用linq(这需要.net 3.5或更高版本)和下面的代码,你可以这样做。
using HtmlAgilityPack;
using System.Linq;
//这些引用必须可用。
private void Form1_Load(object sender, EventArgs e)
{
var rawData = "<p><span>Child Text </span><span class=\"price\">Child Text</span><br />I need this text</p>";
var html = new HtmlAgilityPack.HtmlDocument();
html.LoadHtml(rawData);
html.DocumentNode.SelectNodes("//p/text()").ToList().ForEach(x=>MessageBox.Show(x.InnerHtml));
}
答案 1 :(得分:0)
如果你可以将“需要这个文本”放在带有id的范围内,那就更容易了 - 那么你只需抓住那个id的.innerHTML()。如果你不能改变标记,你可以在“
”之后获取menuElement的.innerHTML()和内容的字符串匹配,但这很脆弱。
答案 2 :(得分:0)
您可以通过将DocumentText拆分为不同的部分来获取文本。
string text = "<p><span>Child Text </span><span class="price">Child Text</span><br />I need this text</p>";
text = text.Split(new string{"<p><span>Child Text </span><span class="price">Child Text</span><br />"}, StringSplitOptions.None)[1];
// Splits the first part of the text, leaving us with "I need this text</p>"
// We can remove the last </p> many ways, but here I will show you one way.
text = text.Split(new string{"</p>"}, StringSplitOptions.None)[0];
// text now has the value of "I need this text"
希望这有帮助!