0

我有一个字符串:

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

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

我试过的

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

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

请注意:这里不涉及 JQuery。这都是服务器端 C#。 (见标签)

4

4 回答 4

4

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

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

于 2013-01-25T11:04:45.850 回答
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;
于 2013-01-25T11:02:33.203 回答
2

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

于 2013-01-25T11:04:56.807 回答
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

  }
于 2013-01-25T11:11:33.417 回答