我有对象列表类型Node( items )。 Node类中有子节点( childItems )。我想在ol li html标记中打印这个结构。
以递归方式准备。但是我的逻辑中存在一些问题。看看我的代码。
项目的大小将为2.根据给定的示例标记。意味着存在2个顶级父母。然后他们还有其他孩子作为他们的名单。
StringBuffer html = new StringBuffer();
void printValues(ArrayList items){
for (Object o : items){
html.append("<ol>");
html.append("<li>");
Node node = (Node)o;
html.append(node.getName);
if (node.getChildItems()!= null){
printValues(node.getChildItems());
}else{
html.append("</li>");
}
html.append("</ol>");
}
}
// ...........
System.out.println(html.toString(););
//...
public class Node{
String Name;
ArrayList childItems = new ArrayList(); // of type Node
/* getter setters are proper */
}
以下标记就是一个例子。它可以在N级。
<ol>
<li>
Manager
<ol>
<li>
Associate Manager
<ol>
<li>
A.M. Configuration 1
</li>
<li>
A.M. Configuration 2
</li>
<li>
Staff Memmber
<ol>
<li>
Staff Memmber Configuration
</li>
<!-- can goes on -->
<li>...</li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
<li>
Client Package
<ol>
<li>
Gold
<ol>
<li>
Feature 1
</li>
<li>
Feature 2
</li>
</ol>
</li>
</ol>
</li>
答案 0 :(得分:1)
这一部分应该得到解决:
...
html.append("<li>");
Node node = (Node)o;
html.append(node.getName);
if (node.getChildItems()!= null){
printValues(node.getChildItems());
}else{
html.append("</li>");
}
...
当我们将其减少到
时,你会明白我的意思...
html.append("<li>");
...
if (node.getChildItems()!= null){
...
}else{
html.append("</li>");
}
...
答案 1 :(得分:1)
这是一个例子(我对相互调用的函数的评论):
public class LiOl {
static StringBuilder sb = new StringBuilder();
static void printList(List<Node> l) {
if (l == null || l.size() == 0) {
return;
}
sb.append("<ol>");
for (Node n : l) {
printNode(n);
}
sb.append("</ol>");
}
static void printNode(Node n) {
sb.append("<li>").append(n.name).append("</li>");
sb.append("<li>");
printList(n.children);
sb.append("</li>");
}
public static void main(String[] args) {
List<Node> l = null;
printList(l);
sb.toString();
}
}
class Node {
String name;
List<Node> children;
}