首页 > 解决方案 > 如何将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("&amp;", "&"), "<li>(.*?)</li>", "$1")}|";
                }
                //}
                return output;
            });

但我没有将列表拆分为字符串 List - 它与模式不匹配。如果我用 li 传递 ul 列表而没有任何属性,那么它可以正常工作。

标签: c#regexlisthtml-lists

解决方案


不建议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));

推荐阅读