我正在读取XML文件并重新创建重新打印的结构,减去所有属性,值和文本。据我所知,它的工作正常,但当我尝试在控制台中重新打印时,我会得到非常奇怪的行为。
for( xmlNode n : treeNodes )
{
System.out.println( n.getLabel() );
printChildNodes( n, 1 );
}
private static void printChildNodes( xmlNode n, int indent )
{
for( int i = 0; i < indent; i++ )
{
System.out.print( indent );
}
for( xmlNode child : n.getChildren() )
{
System.out.println( child.getLabel() + " " + indent );
printChildNodes( child, indent+1 );
}
}
我得到以下输出
ROOT
1A 1
22B 2
333C 3
4444D 4
55555E 5
666666D 4
55555E 5
666666D 4
55555E 5
666666D 4
最初我是打印“\ t”而不是缩进,但我注意到结构看起来不对。现在,我正在摸不着机器中可能出现的重影导致我的“缩进”变量有两个单独的值而没有对其进行任何更改。更不用说奇怪的事情在某种程度上是可以预测的。 D元素应该在E的左边而不是右边(因为它们是E的父母)。
有什么想法吗?
答案 0 :(得分:1)
您只在节点的第一行开头打印一次“缩进”(实际上是很多数字)。
然后在每个孩子之后打印换行符。 “缩进”只会在第一个孩子之前。
您也不打印正在访问的节点,但只打印孩子。这是错误的,当节点本身没有显示/只是一个虚假的缩进时,输出将在没有孩子时非常混乱。
此外,您迭代treeNodes
并调用printChildNodes
函数 - 但这是递归的。理想情况下,我只希望一个递归函数来打印&amp;下降整个子树,没有循环。
printTree( rootNode, 0);
private static void printTree (xmlNode n, int indent) {
StringBuilder ind = new StringBuilder();
for (int i = 0; i < indent; i++)
ind.append(' ');
// print the Node;
//
System.out.println( ind + n.getLabel());
// traverse Descendants.
//
for (xmlNode child : n.getChildren()) {
printTree( child, indent+1);
}
}
这应该是非常万无一失的。