我希望使用递归方法获取XML文件的最大深度,首先我声明了变量
public static int maxdepth=0;
private static void GetDepth(NodeList nl, int level,int maxdepth) {
level++;
if (maxdepth<level)
{
maxdepth= level;
}
if(nl != null && nl.getLength() > 0){
for (int i = 0; i < nl.getLength(); i++) {
Node n = nl.item(i);
if (n instanceof Element)
{
GetDepth(n.getChildNodes(), level, maxdepth);
}
}
}
}
public static void main(String[] args) {
NodeList nl = root.getChildNodes();
GetDepth(nl,level,maxdepth);
System.out.println(maxdepth);
}
当我显示变量maxdepth的值时,我收到值0,作为声明
答案 0 :(得分:4)
int maxdepth
方法签名中的getDepth
隐藏了静态变量maxdepth
。从签名中删除它:
private static void GetDepth(NodeList nl, int level)
然后该方法将起作用。
答案 1 :(得分:2)
您可以使用XPath 2.0将其作为单行使用:
max(for $n in //* return count($n/ancestor::*))
即使在Java中,你也要比现在困难得多:
public int maxDepth(Node node) {
int max = 0;
NodeList kids = node.getChildNodes();
if (kids.getLength() == 0) {
return 0;
}
for (int i=0; i<kids.getLength(); i++) {
int kidMax = maxDepth(kids.item(i);
if (kidMax > max) max = kidMax;
}
return max + 1;
}
未经测试。
答案 2 :(得分:1)
在此代码部分:
if (maxdepth<level)
{
maxdepth= level;
}
您正在更新局部变量maxdepth而不是静态变量。给其中一个变量赋一个不同的名称会使它工作,但由于该方法的maxdepth参数是不必要的,我只需删除它。