我试图获取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>
对GetAllXml(X)的每次调用,不管它做了什么,最终都会调用GetAllXml(X),并传递与其参数相同的值。很明显,它会无限递归。
像这样更改您的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 编写核心解析处理类 输出结果为: