我有一个字符串:
<div class="className1234"><p>Some html</p></div>
从这个字符串中,我想获得<p>Some html</p>
,即我想根据它的类包含'className'的事实删除周围的div标签。
我尝试过什么
我尝试过的东西,但它是笨拙的 - 而且我知道会有更好的选择,如正则表达式或其他东西。我目前所做的是链接一系列substring()
,indexof()
和replace()
来调查div。
请注意:这里没有涉及JQuery。它是服务器端的所有C#。 (见标签)
答案 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
}