Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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# NET framework是否提供解析HTML字符串的方法?_C#_.net_Html_Parsing - Fatal编程技术网

C# NET framework是否提供解析HTML字符串的方法?

C# NET framework是否提供解析HTML字符串的方法?,c#,.net,html,parsing,C#,.net,Html,Parsing,知道我不能使用HTMLAgilityPack,只能使用straight.NET,就说我有一个字符串,其中包含一些HTML,我需要以以下方式进行解析和编辑: 按id或标记查找层次结构中的特定控件 修改(理想情况下创建)找到的元素的属性 在.net中有这样做的方法吗? 您可以创建一个虚拟html文档 WebBrowser w = new WebBrowser(); w.Navigate(String.Empty); HtmlDocument doc = w.Document; doc.Wri

知道我不能使用HTMLAgilityPack,只能使用straight.NET,就说我有一个字符串,其中包含一些HTML,我需要以以下方式进行解析和编辑:

  • 按id或标记查找层次结构中的特定控件
  • 修改(理想情况下创建)找到的元素的属性
在.net中有这样做的方法吗?

您可以创建一个虚拟html文档

WebBrowser w = new WebBrowser();
w.Navigate(String.Empty);
HtmlDocument doc = w.Document;
doc.Write("<html><head></head><body><img id=\"myImage\" src=\"c:\"/><a id=\"myLink\" href=\"myUrl\"/></body></html>");
Console.WriteLine(doc.Body.Children.Count);
Console.WriteLine(doc.GetElementById("myImage").GetAttribute("src"));
Console.WriteLine(doc.GetElementById("myLink").GetAttribute("href"));
Console.ReadKey();
输出:


file:///d:

假设您处理的是格式良好的HTML,您只需将文本视为XML文档即可。该框架加载了一些功能,可以完全满足您的要求


您可以了解HTML Agility Pack的工作原理,但它是.Net。您可以反映程序集,并看到它正在使用MFC,如果您愿意,可以复制它,但您所做的只是移动程序集,而不是使其成为.Net。

除了HTML Agility Pack,并将HtmlUnit移植到C#之外,听起来像是固体解决方案的是:

  • 最明显-使用正则表达式。(System.Text.RegularExpressions)
  • 使用XML解析器。(因为HTML是一个标记系统,将其视为XML文档?)
  • 林克
我知道的一件事是,像XML一样解析HTML可能会导致您遇到一些问题。XML和HTML不一样。请阅读:


还有,这是一篇关于我知道的。。。我不知道。。。不要使用正则表达式如果你的HTML恰好是XHTML,那么你可以使用标准XML库来解析、遍历和修改它。简短的回答是否定的。Agility Pack是最接近认可的(.NET)HTML解析器的东西。为什么“我不能使用HTMLAgilityPack”?排除一个非常好(甚至是免费)的工具似乎很愚蠢。这要求您在Winforms控件中加载文档。如果我错了,请纠正我,但这需要webBrowser控件,不允许直接解析HTML字符串。@JellyAma,是的,但这不是您在“修改(和理想创建)”中想要的吗找到的元素的属性“?@Alexei,最重要的是,我需要解析HTML字符串。尝试解析这个格式良好的HTML<代码>第1行
第2行
HtmlElement imageElement = doc.GetElementById("myImage");
string newSource = "d:";
imageElement.OuterHtml = imageElement.OuterHtml.Replace(
        "src=\"c:\"",
        "src=\"" + newSource + "\"");
Console.WriteLine(doc.GetElementById("myImage").GetAttribute("src"));