Html解析敏捷
问题描述:
有人可以请帮忙解决在C#中敏捷解析Html顺序标签的麻烦吗?我有两个问题列在下面。Html解析敏捷
在这种情况下,我想解析下面的Html并将它们存储到结构(列表,堆栈等)中,以便我可以有效地使用这些数据。
<h3> header </h3>
<p> paragraph 1</p>
<p>
<a href="www.google.com">Google</a>
<a href="www.gizmodo.com">Gizmodo</a>
</p>
<ul>
<li> something is here with a download
<a href="www.google.com">link</a>
</li>
<li> hello
<img src="www.imagesource.com"/>
</li>
</ul>
-
如何分析在连续的方式处理这些数据?
如果我使用
var ParaTags = HtmlDocument.DocumentNode.Descendants("p");
, 那么我只能得到所有的“p”标签。但我不知道如何依次获得“h3”,然后“p”,因为“p”不在“h3”内。
下面的代码将返回我的所有超链接,
var links =
from paras in document.DocumentNode.Descendants("p")
from hyperLinks in paras.Descendants("a").Where(x => x.Attributes["href"].Value != "")
select hyperLinks;
- 什么来解析和存储这些混合内容与字符串,超链接和图像的最佳方法是什么? 因此我可以稍后以有效的方式输出它们吗?列表,堆栈? 另一个词,我想存储来自html的每一个可能的内容,如果可能的话,保留它的格式。所以一旦我将它重新加载到应用程序中,我就可以以适当的格式模仿内容。
谢谢!
答
如果要提取所有href
和src
属性,你可以试试这个:
using System;
using System.Linq;
using HtmlAgilityPack;
public class Program
{
static void Main()
{
var document = new HtmlDocument();
document.Load("test.html");
var links =
from element in document.DocumentNode.Descendants()
let href = element.Attributes["href"]
let src = element.Attributes["src"]
where href != null || src != null
select href != null ? href.Value : src.Value;
foreach (var link in links)
{
Console.WriteLine(link);
}
}
}
输出:
www.google.com
www.gizmodo.com
www.google.com
www.imagesource.com
+0
但我也需要提取h3和p的文本! – Jerry 2012-08-15 07:41:40
目前尚不清楚你想从这个HTML和存储中提取的信息。你想提取超链接的所有'href'属性吗?或图像的'href'和'src'? – 2012-08-15 07:23:53
我想从该html中获取所有可能的内容,其中包括h3,所有p,li,href和img src。如果可能的话,格式也是如此。谢谢。 – Jerry 2012-08-15 07:43:41
如果提供内存服务,可以在HtmlDocument类上使用XmlReader,它可以让您按顺序依次读取每个标记,但我不确定您期望的输出会为您提供一些可能的内容重建成确切的Html。 – Pooli 2012-08-15 08:01:01