当前位置: 首页 > 知识库问答 >
问题:

使用JDOM分析XML文件,错误StackOverflowerError

晏阳飙
2023-03-14

我试图获取XML文件的所有元素并将其放入ArrayList

我想得到这样一个结构[[[un],[[deux,trois,quatre],[[cinq,six,sept],[huit,noeuf],[dix,onze]]这是我的代码

import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.NodeList;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.Element;



public class esperant {

/**
 * @param args
 */


private static List<Element> getChildren(Node parent) 
{
    NodeList nl = parent.getChildNodes();
    List<Element> children = new ArrayList<Element>(nl.getLength());
    for (int i = 0; i < nl.getLength(); i++) {
       Node n = nl.item(i);
       if (n instanceof Element)
            children.add((Element) n);
    }
    return children;
}


public static void GetAllXml(ArrayList<ArrayList<ArrayList<Element>>> ListTree)
{
    ArrayList<ArrayList<Element>> child = new ArrayList<ArrayList<Element>>();

    int level = ListTree.size()-1;

    for (int i=0;i<ListTree.get(level).size();i++)
    {

         for (int j=0;j<ListTree.get(level).get(i).size();j++)
            {
             ArrayList<Element> childOfChild = new ArrayList<Element>();
             childOfChild.addAll(getChildren(ListTree.get(level).get(i).get(j)));
             child.add(childOfChild);   
            }


    }
    ListTree.add(child);
    GetAllXml(ListTree);
}

public static void main(String[] args) {
    // TODO Auto-generated method stub
    ArrayList<ArrayList<ArrayList<Element>>> ListTree = new ArrayList<ArrayList<ArrayList<Element>>>();
    ArrayList<ArrayList<Element>> child = new ArrayList<ArrayList<Element>>();
    ArrayList<Element> childOfChild = new ArrayList<Element>();
    try{
         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
         DocumentBuilder parser = factory.newDocumentBuilder();
         Document doc = parser.parse("test.xml");
         Element root = doc.getDocumentElement();


         childOfChild.add(root);
         child.add(childOfChild);
         ListTree.add(child);


         GetAllXml(ListTree);




         System.out.println(ListTree);



    }
    catch (Exception e)
    {
         e.printStackTrace();
    }


}

}

以下是xml文件:

<?xml version="1.0"  encoding="iso-8859-1"?>
  <un>
     <deux> <cinq></cinq> <six></six> <sept></sept> </deux>
     <trois> <huit></huit><noeuf></noeuf>  </trois>
     <quatre><dix></dix><onze></onze> </quatre>
  </un>

共有2个答案

公羊向荣
2023-03-14

对GetAllXml(X)的每次调用,不管它做了什么,最终都会调用GetAllXml(X),并传递与其参数相同的值。很明显,它会无限递归。

卢子民
2023-03-14

像这样更改您的GetAllXml(X),它会起作用。正如上面每个人所说,没有办法摆脱这种方法。

    final ArrayList<ArrayList<Element>> child = new ArrayList<ArrayList<Element>>();

    final int level = ListTree.size() - 1;

    for (int i = 0; i < ListTree.get(level).size(); i++)
    {

        for (int j = 0; j < ListTree.get(level).get(i).size(); j++)
        {
            final ArrayList<Element> childOfChild = new ArrayList<Element>();
            childOfChild.addAll(getChildren(ListTree.get(level).get(i).get(j)));
            if (childOfChild.size() > 0)
            {
                child.add(childOfChild);
            }

        }
    }
    if (child.size() > 0)
    {
        ListTree.add(child);
        GetAllXml(ListTree);
    }
 类似资料:
  • 我在解析名为“test.XML”的XML文件时遇到如下问题: 我想得到这样的结构:[[[[un]],[[deux,trois,quatre],[[cinq,six,sept],[huit,noeuf],[dix,onze]],但我得到了这个[[[cinq,six,sept],[[huit,noeuf],[[dix,onze],[[deux,trois,quatre]] 这是我的代码:

  • 主要内容:Java JDOM解析器 解析XML文档的步骤,Java JDOM解析器 解析XML文档的示例Java JDOM解析器 解析XML文档的步骤 以下是使用 JDOM解析器 解析文档时使用的步骤。 导入与 XML 相关的包。 创建一个文档生成器。 从文件或流创建文档 提取根元素 检查属性 检查子元素 导入 XML 相关的包 创建一个文档生成器 从文件或流创建文档 提取根元素 检查属性 检查子元素 Java JDOM解析器 解析XML文档的示例 input.xml文件: JDomParser

  • JDOM是一个基于Java的开源库,用于解析XML文档。 它通常是Java开发人员友好的API。 它是Java优化的,它使用像List和Arrays这样的Java集合。 JDOM使用DOM和SAX API,并结合了两者中的最佳功能。 它的内存占用率低,几乎与SAX一样快。 环境设置 (Environment Setup) 要使用JDOM解析器,您应该在应用程序的类路径中使用jdom.jar。 下载

  • 主要内容:Java JDOM解析器 修改XML文档的示例Java JDOM解析器 修改XML文档的示例 需要修改的XML文档为: 编写利用JDOM解析器修改XML文档的程序 输出结果为:

  • 主要内容:Java JDOM解析器 创建XML文档的示例Java JDOM解析器 创建XML文档的示例 编写用于生成XML文档JDOM解析器程序 需要注意的是,该案例只是把生成的XML内容打印在控制台,并没有保存到硬盘(可自行修改) 控制台输入结果为:

  • 主要内容:Java JDOM解析器 查询XML文档的示例Java JDOM解析器 查询XML文档的示例 需要解析的文件input.xml 编写核心解析处理类 输出结果为: