Как рассчитать глубину xml документа (пример DOM)
Note
Этот вопрос с форума JNP, спрашивающий, какcalculate the depth of the entire XML document.
Чтобы получить глубину XML, просто рекурсивно зациклите узел и сравните уровень, вот и все. Вот пример DOM-парсера для подсчета и показа самого глубокого уровня файла XML.
1. XML-файл
/users/example/test.xml
yong mook kim example 1000000 29 123 low yin fong fong fong 500000
2. Пример Java & DOM
XMLUtil.java
package com.example; 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/example/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