c# - 如何将ul列表拆分为Listwith li 使用类或其他属性
问题描述
我有一个 htmlul
列表:
<ul>
<li class="ng-scope">Item 1</li>
<li class="ng-scope">Item 2</li>
<li class="ng-scope">Item 3</li>
</ul>
我想把它转换成List<string>
C#。元素可以有一个属性,li
也可以没有。例如。它可以是<li class="ng-scope">
或只是<li>
我目前正在这样做:
string patternUL = @"<(ul|ol)[\s]*[^\>]*>(<li[ a-z=""\\]*>.*?</li>)+?</\1>";
string trg = Regex.Replace(source, patternUL, (param) =>
{
foreach (Capture c in param.Groups[2].Captures)
{
output += $"{Regex.Replace(c.Value.Replace("&", "&"), "<li>(.*?)</li>", "$1")}|";
}
//}
return output;
});
但我没有将列表拆分为字符串 List - 它与模式不匹配。如果我用 li 传递 ul 列表而没有任何属性,那么它可以正常工作。
解决方案
不建议html
使用正则表达式解析。而是使用HTML 敏捷包之类的框架。这样做你可以实现<li></li>
像这样的列表:
var html = @"
<ul>
<li class=""ng-scope"">Item 1</li>
<li class=""ng-scope"">Item 2</li>
<li class=""ng-scope"">Item 3</li>
</ul>";
var doc = new HtmlDocument();
doc.LoadHtml(html);
var list = new List<string>(doc.DocumentNode.SelectNodes("//li").Select(li => li.InnerText));
推荐阅读
- javascript - mup 部署的应用程序中的 .meteor 目录在哪里?
- python - 从python中的范围计算用户输入数字
- c++ - C++升级到VS2017:关于模糊调用的错误C2668
- docker - CRON 作业找不到在 docker-compose 中设置的环境变量
- liferay - 在 Liferay DXP 中部署时出现 Class Cast 异常
- azure-devops - 将 Azure Active Directory 连接到 VSTS 失败
- sql-server - 插入的更新输出 #temp 查询挂在产品上
- c# - 如何获取具有可选值 minOccurs=0 的 xml 元素
- xml - 错误“cvc-elt.1:找不到元素 'xs:schema' 的声明。” 在日食中
- sql - Oracle Sql - 我有两个表,需要使用 table2 的结果过滤 table1。如果 table2 为空,我需要返回所有 table1