【问题标题】:how to count the depth of an XML file - DOM如何计算 XML 文件的深度 - DOM
【发布时间】:2012-05-06 17:45:40
【问题描述】:

我想像这样计算 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>

【问题讨论】:

  • 那么到目前为止你的方法是什么?您尝试过哪些不起作用的方法?
  • 你想要的结果是什么?找到文档的最深处?或者只是一种计算嵌套子节点数量的通用方法。根据我的经验,节点的深度通常并不重要,因为它们通常是通过节点名称找到的。

标签: java dom xml-parsing sax jdom


【解决方案1】:

您可以使用它并根据您的需要进行自定义...使用 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;
    }

}

}

【讨论】:

  • 如何显示最大深度,在我的示例中,最大深度为 3
【解决方案2】:

你正在寻找一个树遍历

http://en.wikipedia.org/wiki/Tree_traversal

具体来说,您可以通过深度或广度两种方式做到这一点。

有多种 java 技术可以做到这一点。

http://www.java2s.com/Code/Java/XML/TraversetheDOMtreeusingTreeWalker.htm

你具体想做什么

【讨论】:

    【解决方案3】:

    一切都与关系有关。在JDOM中,你想要的关系就是父元素的个数。

    另一方面,如果您想要的只是元素的级别,那么原始 SAX 解析会更快,而且会更好。

    以防万一这是作业,我会指出正确的方向......

    使用 JDOM,您可以在 Content 上使用 getParentElement() 函数,并在该函数上循环,直到有更多的父级。如果您计算每个循环,您将获得级别....

    使用 DOM 你也有一个 getParentNode()

    使用 SAX,您可以在 startElement 和 endElement 方法中增加和减少“级别”。

    【讨论】:

      猜你喜欢
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-28
      • 2016-05-13
      • 1970-01-01
      • 2010-12-24
      相关资源
      最近更新 更多