XMLの深さを取得するには、ノードを再帰的にループし、そのレベルを比較するだけです。これは、XMLファイルの最も深いレベルを数えて表示するDOMパーサの例です。

1. XMLファイル

/users/mkyong/test.xml

<company>
        <staff id="1">
                <firstname>yong</firstname>
                <lastname>mook kim</lastname>
                <nickname>mkyong</nickname>
                <salary>1000000</salary>
                <age>29</age>
        <extra>
            <test>123</test>
        </extra>
        </staff>
        <staff id="2">
                <firstname>low</firstname>
                <lastname>yin fong</lastname>
                <nickname>fong fong</nickname>
                <salary>500000</salary>
        </staff>
</company>

2. Java

XMLUtil.java

package com.mkyong;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class XMLUtil {

  static int depthOfXML = 1;

  public static void main(String argv[]) {

    try {

    String filepath = "/users/mkyong/test.xml";
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
    Document doc = docBuilder.parse(filepath);

    Element elements = doc.getDocumentElement();

    int level = 1;
    System.out.println(elements.getNodeName() + "[" + level + "]");

    NodeList nodeList = elements.getChildNodes();
    printNode(nodeList, level);

    System.out.println("The deepest level is : " + depthOfXML);

    } catch (ParserConfigurationException pce) {
    pce.printStackTrace();
    } catch (IOException ioe) {
    ioe.printStackTrace();
    } catch (SAXException sae) {
    sae.printStackTrace();
    }
  }

  private static void printNode(NodeList nodeList, int level) {
    level++;
    if (nodeList != null && nodeList.getLength() > 0) {

      for (int i = 0; i < nodeList.getLength(); i++) {

        Node node = nodeList.item(i);
        if (node.getNodeType() == Node.ELEMENT__NODE) {

            System.out.println(node.getNodeName() + "[" + level + "]");
            printNode(node.getChildNodes(), level);

           //how depth is it?
            if (level > depthOfXML) {
                depthOfXML = level;
            }

         }

        }

      }

  }

}

出力

company[1]staff[2]firstname[3]lastname[3]nickname[3]salary[3]age[3]extra[3]test[4]staff[2]firstname[3]lastname[3]nickname[3]salary[3]The deepest level is : 4

参考文献

  1. リンク://java/how-to-count-xml-elements-in-java-dom-parser/[How To Count

JavaのXML要素 – (DOM Parser)]。リンク://java/how-to-read-xml-file-in-java-dom-parser/[XMLを読む方法

Javaのファイル – (DOMパーサー)]