我想像这样计算XML文件的深度:
<?xml version="1.0" encoding="iso-8859-1"?>
<country> -----> Level 1
<name> France </name> ----> Level 2
<city> Paris </city>
<region>
<name> Nord-Pas De Calais </name> ---> Level 3
<population> 3996 </population>
<city> Lille </city>
</region>
<region>
</region>
</country>
答案 0 :(得分:3)
您可以使用此功能并根据您的需要进行自定义...使用DOM解析器公共类测试{
public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document dom = db.parse("country.xml");
Element elem = dom.getDocumentElement();
int level = 1;
System.out.println(elem.getNodeName() + "--->" + level);
NodeList nl = elem.getChildNodes();
displayLevel(nl,level);
}
/**
* Recursive function to go through the nodes to display the level.
* @param nl
* @param level
*/
private static void displayLevel(NodeList nl, int level) {
level++;
if(nl != null && nl.getLength() > 0){
for (int i = 0; i < nl.getLength(); i++) {
Node n = nl.item(i);
System.out.println(n.getNodeName() + "--->" + level);
displayLevel(n.getChildNodes(), level);
}
}else{
return;
}
}
}
答案 1 :(得分:1)
您正在寻找树遍历
http://en.wikipedia.org/wiki/Tree_traversal
具体来说,你可以通过深度或广度两种方式来做到这一点。
有多种Java技术可以做到这一点。
http://www.java2s.com/Code/Java/XML/TraversetheDOMtreeusingTreeWalker.htm
你具体想做什么
答案 2 :(得分:1)
这完全是关系。在JDOM中,您想要的关系是父元素的数量。
另一方面,如果您想要的只是元素的级别,那么原始SAX解析会更快并且各种更好。
万一这是作业,我只是指出正确的方向......
使用JDOM,您可以在Content上使用getParentElement()函数,并在其上循环,直到有更多父项。如果算上每个循环,你将获得等级......使用DOM,您还有一个getParentNode()
使用SAX,您可以在startElement和endElement方法中递增和递减'level'。