在我的应用程序中,我将TINYMCE作为html编辑器来接受这个值:
插入后,我数据库中的字段看起来像这样。
<ul>
<li>Speedy Course</li>
<li>Zerix</li>
<li>Optimum Innovatus</li>
<li>Optimum Source</li>
</ul>
现在我想在访问数据时获取li标签的值。
有一种快速而简单的方法吗?我能想到的唯一方法是逐个循环这些值。我顺便使用MVC3。
非常感谢提前。
答案 0 :(得分:1)
不确定您是否使用SQL,但如果是这样,您可以将这两个CLR项添加到数据库...
[SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = true, IsPrecise = true, Name = "RegExSplitIndex",
SystemDataAccess = SystemDataAccessKind.None, FillRowMethodName = "RegExSplitIndexRow",
TableDefinition =
"Match NVARCHAR(MAX), MatchIndex INT, MatchLength INT, NextMatchIndex INT"
)]
public static IEnumerable RegExSplitIndex(SqlString input, SqlString pattern, SqlInt32 options)
{
if (input.IsNull || pattern.IsNull) return null;
var matchcol = Regex.Matches(input.Value, pattern.Value, (RegexOptions)options.Value);
var matches = matchcol.Cast<Match>().ToList().Select(MatchKeys.Translate).ToList();
if (matches.Any() && matches.All(i => i.MatchIndex != 0))
{
var ix = matches.OrderBy(i => i.MatchIndex).First().MatchIndex;
matches.Add(new MatchKeys() {MatchIndex = 0, MatchLength = 0, NextMatchIndex = ix});
}
return matches;
}
public static void RegExSplitIndexRow(Object input, ref SqlString match, ref SqlInt32 matchIndex, ref SqlInt32 matchLength, ref SqlInt32 nextMatchIndex)
{
MatchKeys m = (MatchKeys)input;
match = new SqlString(m.Match);
matchIndex = m.MatchIndex;
matchLength = m.MatchLength;
nextMatchIndex = m.NextMatchIndex;
}
然后在你的sql查询中你可以使用像这样的Split函数来拆分html标签:
OUTER APPLY [dbo].RegExSplitIndex(<YourdbField>),'(<(?:"[^"]*"[''"]*|''[^'']*''[''"]*|[^''">])+>)|\n',0) REM
然后检查匹配值([REM].[Match] = '<li>'
)
您可以使用匹配索引和长度来了解从拆分字符串中获取实际值所需的位置
如果您无法访问CLR,那么您仍然可以使用正则表达式进行拆分,并使用类似的策略在代码中完成所有操作