获得div的'内部html'的更好的选择?

时间:2013-01-25 10:59:35

标签: c# html regex string innerhtml

我有一个字符串:

<div class="className1234"><p>Some html</p></div>

从这个字符串中,我想获得<p>Some html</p>,即我想根据它的类包含'className'的事实删除周围的div标签。

我尝试过什么

我尝试过的东西,但它是笨拙的 - 而且我知道会有更好的选择,如正则表达式或其他东西。我目前所做的是链接一系列substring()indexof()replace()来调查div。

编辑:我使用了“innerhtml”这个短语,因为我觉得那里有一个库可以让我根据其中的标签来操作一个字符串。

请注意:这里没有涉及JQuery。它是服务器端的所有C#。  (见标签)

4 个答案:

答案 0 :(得分:4)

我建议Html Agility Pack,它旨在允许对html文档进行操作,有点像框架中内置的XML支持。

它可能有点矫枉过正,但它可以轻松完成工作,而且你不必关心糟糕的HTML

答案 1 :(得分:2)

怎么样:

XmlDocument doc = new XmlDocument();
doc.LoadXml(divStr);
// classAtr will be null if the root is not a div with a class with the value className1234
XmlNode classAtr = doc.SelectSingleNode("/div/@class[contains(., 'className1234')]");
string result = classAtr != null ? doc.DocumentElement.InnerXml : divStr;

答案 2 :(得分:2)

每当您需要操作HTML时,您应该使用专用的HTML解析器/ DOM库。我在StackOverflow上为.Net推荐的一个库是HTMLAgilityPack

答案 3 :(得分:0)

正如其他人所说HtmlAgilityPack最适合html解析,也一定要从HtmlAgilityPack网站下载HAP Explorer,用它来测试你的选择,无论如何这个SelectNode命令都会得到:

  HtmlDocument doc = new HtmlDocument();
  doc.Load(htmlFile);
  var myNodes = doc.DocumentNode.SelectNodes("/div/@class[. = 'className1234']");
  foreach (HtmlNode node in myNodes)
  {
    // you code

  }