Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 解析HTML/CSS/PHP文件_C#_.net_Html_Css_Winforms - Fatal编程技术网

C# 解析HTML/CSS/PHP文件

C# 解析HTML/CSS/PHP文件,c#,.net,html,css,winforms,C#,.net,Html,Css,Winforms,我需要某种图书馆,可能是HTMLAgilityPack?它可以解析HTML文件和CSS文件。但这有点棘手,因为HTML(PHP)文件中可能包含PHP代码,也可能包含CSS代码,所以如果没有库的帮助,我甚至不可能独自尝试解决这个问题 我正在Visual Studio Express 2010中使用C#/WinForms。到目前为止,我唯一能找到的是HTML AgilityPack,它没有我能找到的文档,而且我不确定它是否完成了我需要它做的所有事情 我的确切要求是找到一种方法来解析HTML文件,循环

我需要某种图书馆,可能是HTMLAgilityPack?它可以解析HTML文件和CSS文件。但这有点棘手,因为HTML(PHP)文件中可能包含PHP代码,也可能包含CSS代码,所以如果没有库的帮助,我甚至不可能独自尝试解决这个问题

我正在Visual Studio Express 2010中使用C#/WinForms。到目前为止,我唯一能找到的是HTML AgilityPack,它没有我能找到的文档,而且我不确定它是否完成了我需要它做的所有事情

我的确切要求是找到一种方法来解析HTML文件,循环遍历每个标记,获取其内容,获取所有属性和值等,并对每个标记进行处理


你以前见过这样的图书馆吗?有人能提供一些帮助/建议吗?我并不是真的在追求完美,只是简单和多样性。

HTML Agility Pack将允许您按照您所描述的元素进行循环。文档有点薄,但它是按照XmlDocument类建模的,这大大简化了学习过程。元素是使用XPath查询选择的。这里有一个小的用法示例

下面是一些示例代码,它遍历HTML文档中的所有元素(注意,其中包括文本元素、
元素等):

var doc=new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(someHtmlString);
foreach(doc.DocumentNode.SelectNodes(“*”)中的HtmlNode节点可枚举。空(){
var contents=node.InnerHtml;
foreach(node.Attributes中的var属性){
var name=attribute.name;
var值=属性值;
}
}

解释如何处理PHP标记(您可能想忽略或提取它们)。

摆脱PHP代码应该不难,可能可以通过正则表达式来完成(基本上,您只想去掉
之间的任何内容)

就HTML而言,CSS只是文本数据,因此您可以解析HTML,将每个
标记的内容提取为字符串,然后使用CSS解析器解析(如果您甚至关心CSS的内容)

我以前没有听说过Html Agility Pack,但它看起来可以胜任这项工作,而且有很多答案推荐它


我还发现了CSS解析器,以防您也需要它。

是的,别忘了
??Enumerable.Empty()
位。。。。(比我的解决方案要好得多,顺便说一句!+1)。。这是我对HAP最大的不满。如果你只关心HTML元素,PHP和CSS就不应该成为问题。该代码可能只是
中的文本。除非您也需要解析PHP,否则HAP将完成这项工作。
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(someHtmlString);

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("*") ?? Enumerable.Empty<HtmlNode>()) {
    var contents = node.InnerHtml;
    foreach (var attribute in node.Attributes) {
        var name = attribute.Name;
        var value = attribute.Value;
    }
}