虽然仍处于可塑性状态,但此代码有效:
public List<string> GetParagraphsListFromHtml(string sourceHtml)
{
var pars = new List<string>();
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(sourceHtml);
var getHtmlWeb = new HtmlWeb();
var document = getHtmlWeb.Load("http://www.montereycountyweekly.com/opinion/letters/article_e333a222-942d-11e3-ba9c-001a4bcf6878.html");
var pTags = document.DocumentNode.SelectNodes("//p");
int counter = 1;
if (pTags != null)
{
foreach (var pTag in pTags)
{
pars.Add(pTag.InnerText);
MessageBox.Show(pTag.InnerText);
counter++;
}
}
MessageBox.Show("done!");
return pars;
}
我真正想要的是获取所有文本元素(按顺序),而不仅仅是段落标记(“SelectNodes(”// p“))。
是否可以同时获得多种标签类型,例如(伪代码):
var textTags = document.DocumentNode.SelectNodes("//h1", "//h2", "//h3", "//p", );
...或LINQified版本,例如:
foreach (var par in doc.DocumentNode
.DescendantNodes()
.Single(x => x.Id == "body")
.DescendantNodes()
.Where(x => x.Name == "h1" || x.Name == "h2" || x.Name == "h3" || x.Name == "hp" || ))
答案 0 :(得分:1)
我认为这可能适合你:
doc.DocumentNode.ChildNodes.Where(x => (x.NodeType == HtmlNodeType.Text));
这将获取所有文本元素。