C#:解析HTML锚标记

时间:2015-10-29 20:08:14

标签: c# html xml string parsing

我有一个存储在字符串中的锚标记:

<a class="yes" href="Folder/Default.aspx?use=abc&amp;employee=xxx1&amp;status=yes">XYZ</a>

我需要解析此字符串以查找href属性和显示文本的值。请指教。

P.S。尝试将加载字符串转换为XML,但它会引发异常 - “=”是一个意外的标记。预期的标记是';' 另一种方法是使用substring方法,但我正在寻找其他替代方法。

3 个答案:

答案 0 :(得分:1)

您可以使用:

string anchor = @"<a class=""yes"" href=""Folder/Default.aspx?use=abc&amp;employee=xxx1&amp;status=yes"">XYZ</a>";
XmlDocument xml = new XmlDocument();
xml.LoadXml(anchor);
string hrefvalue = xml.FirstChild.Attributes["href"].Value; // variable hrefvalue contains the value of the href attribute.

答案 1 :(得分:1)

您可以使用this等正则表达式来执行此操作:

string link = "<a class=\"yes\" href=\"Folder/Default.aspx?use=abc&amp;employee=xxx1&amp;status=yes\">XYZ</a>";
var href = Regex.Match(link, "href=\"(?<link>.*)\"").Groups["link"];
var display = Regex.Match(link, ">(?<display>.*)<").Groups["display"];
if (href.Success && display.Success)
{
    Console.WriteLine(href.Value);
    Console.WriteLine(display.Value);
}

但是如果你想进行真正的HTML解析,那么你最好使用像HTMLAgilityPack这样的东西:

string link = "<a class=\"yes\" href=\"Folder/Default.aspx?use=abc&amp;employee=xxx1&amp;status=yes\">XYZ</a>";
var document = new HtmlDocument();
document.LoadHtml(link);
if (!document.ParseErrors.Any())
{
    var linkTarget = document.DocumentNode.FirstChild.Attributes["href"];
    var linkInnerText = document.DocumentNode.FirstChild.InnerText;
    Console.WriteLine("Link target: {0} Link text: {1}", linkTarget, linkInnerText);
}

答案 2 :(得分:-2)

您可以使用CsQuery

例如:

string html = "<a class=\"yes\" href=\"Folder / Default.aspx ? use = abc & amp;employee = xxx1 & amp;status = yes\">XYZ</a>";
string href = new CsQuery.CQ(html).Attr("href");
相关问题