我正在使用c#.我有以下字符串
<li>
<a href="abc">P1</a>
<ul>
<li><a href = "bcd">P11</a></li>
<li><a href = "bcd">P12</a></li>
<li><a href = "bcd">P13</a></li>
<li><a href = "bcd">P14</a></li>
</ul>
</li>
<li>
<a href="abc">P2</a>
<ul>
<li><a href = "bcd">P21</a></li>
<li><a href = "bcd">P22</a></li>
<li><a href = "bcd">P23</a></li>
</ul>
</li>
<li>
<a href="abc">P3</a>
<ul>
<li><a href = "bcd">P31</a></li>
<li><a href = "bcd">P32</a></li>
<li><a href = "bcd">P33</a></li>
<li><a href = "bcd">P34</a></li>
</ul>
</li>
<li>
<a href="abc">P4</a>
<ul>
<li><a href = "bcd">P41</a></li>
<li><a href = "bcd">P42</a></li>
</ul>
</li>
Run Code Online (Sandbox Code Playgroud)
我的目标是从上面的字符串填写以下列表.
List<class1>
Run Code Online (Sandbox Code Playgroud)
class1有两个属性,
string parent;
List<string> children;
Run Code Online (Sandbox Code Playgroud)
它应填写父母的P1和儿童的P11,P12,P13,P14,并列出它们.
任何建议都会有所帮助.
编辑
样品
public List<class1> getElements()
{
List<class1> temp = new List<class1>();
foreach(// <a> element in string)
{
//in the recursive loop
List<string> str = new List<string>();
str.add("P11");
str.add("P12");
str.add("P13");
str.add("P14");
class1 obj = new class1("P1",str);
temp.add(obj);
}
return temp;
}
Run Code Online (Sandbox Code Playgroud)
这里的值是硬编码的,但它是动态的.
如果你不能使用我推荐的第三方工具,Html Agility Pack你可以使用 Webbrowser类和HtmlDocument类来解析 HTML:
WebBrowser wbc = new WebBrowser();
wbc.DocumentText = "foo"; // necessary to create the document
HtmlDocument doc = wbc.Document.OpenNew(true);
doc.Write((string)html); // insert your html-string here
List<class1> elements = wbc.Document.GetElementsByTagName("li").Cast<HtmlElement>()
.Where(li => li.Children.Count == 2)
.Select(outerLi => new class1
{
parent = outerLi.FirstChild.InnerText,
children = outerLi.Children.Cast<HtmlElement>()
.Last().Children.Cast<HtmlElement>()
.Select(innerLi => innerLi.FirstChild.InnerText).ToList()
}).ToList();
Run Code Online (Sandbox Code Playgroud)
这是调试器窗口中的结果:

| 归档时间: |
|
| 查看次数: |
654 次 |
| 最近记录: |