如何从C#中的html中仅获取父标记文本

时间:2012-04-28 19:18:56

标签: c# html

我实际上是试图从带有一些子标签的标签中抓取文本

例如

<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来做到这一点,我是新手。

谢谢

3 个答案:

答案 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"

希望这有帮助!