【发布时间】:2015-02-02 23:20:12
【问题描述】:
我想从数据库中查询一个字符串 (html) 并将其显示在网页上。问题是数据有一个
<p> around the text (ending with </p>
我想在返回此数据的视图模型或控制器操作中去除此外部标记。在 C# 中执行此操作的最佳方法是什么?
【问题讨论】:
标签: c# html asp.net-mvc
我想从数据库中查询一个字符串 (html) 并将其显示在网页上。问题是数据有一个
<p> around the text (ending with </p>
我想在返回此数据的视图模型或控制器操作中去除此外部标记。在 C# 中执行此操作的最佳方法是什么?
【问题讨论】:
标签: c# html asp.net-mvc
对于您的需求可能有点过头了,但如果您想解析 HTML,您可以使用 HtmlAgilityPack - 通常比这里建议的大多数解决方案更干净,尽管它可能没有那么高效:
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("<p> around the text (ending with </p>");
string result = doc.DocumentNode.FirstChild.InnerHtml;
【讨论】:
如果您绝对确定字符串将始终具有该标签,则可以使用String.Substring 像myString.Substring(3, myString.Length-7) 左右。
更可靠的方法是手动编写适当的测试代码或使用正则表达式,或者最终使用BrokenGlass's answer 建议的 HTML 解析器。
更新:你可以使用正则表达式:
String filteredString = Regex.Match(myString, "^<p>(.*)</p>").ToString();
您可以在初始 ^ 之后添加 \s 以删除前导空格。此外,您可以检查 Match 的结果以查看字符串是否完全匹配 <p>...</p> 模式。 This 也可能有帮助。
【讨论】:
如果数据总是被<p> ... </p>包围:
string withoutParas = withParas.Substring(3, withParas.Length - 7);
【讨论】:
尝试使用字符串函数 Remove() 将 <p> 的 FirstIndex() 和长度为 3 的 </p> 的最后一个索引传递给它
【讨论】:
如果您绝对保证您的字符串将始终符合<p>...</p> 的模式,那么使用data.Substring(3, data.Length - 6) 的其他解决方案就足够了。但是,如果它有可能看起来完全不同,那么您真的需要使用 HTML 解析器。共识是HTML Agility Pack 是要走的路。
【讨论】:
...
", "..
" 等等。是的,如果你是,你需要使用 HTML 解析器与 HTML 交互。s = s.Replace("<p>", String.Empty).Replace("</p>", String.Empty);
【讨论】:
<p> 或</p> 的每个 实例,包括任何内部实例吗?
的每个实例,只替换外部实例
不会出现在段落中。除非你的意思是你有多个段落。这对我来说并不完全清楚。