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

递归解析XML文件jdom

陶高峯
2023-03-14

我在解析名为“test.XML”的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>

我想得到这样的结构:[[[[un]],[[deux,trois,quatre],[[cinq,six,sept],[huit,noeuf],[dix,onze]],但我得到了这个[[[cinq,six,sept],[[huit,noeuf],[[dix,onze],[[deux,trois,quatre]]

这是我的代码:

 import java.util.ArrayList;

 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;

 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 import org.w3c.dom.Element;

public class Wassim {

/**
 * @param args
 */

public static void GetAllXml(ArrayList<ArrayList<ArrayList<String>>> ListTree, Node node)
{
    ArrayList<ArrayList<String>> child = new ArrayList<ArrayList<String>>(); 
    ArrayList<String> childOfChild = new ArrayList<String>();

    NodeList nl= node.getChildNodes();
    if (nl.getLength()>0)
    {
    for (int i=0;i<nl.getLength();i++)
    {

          Node n = nl.item(i);
          if (n instanceof Element)
          {

              childOfChild.add(n.getNodeName());
              GetAllXml(ListTree, n);
          }
    }
    child.add(childOfChild);
    ListTree.add(child);
    }

}


public static void main(String[] args) {
    // TODO Auto-generated method stub

     try{
         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
         DocumentBuilder parser = factory.newDocumentBuilder();
         Document doc = parser.parse("test.xml");
         Node root = doc.getDocumentElement();
         ArrayList<ArrayList<ArrayList<String>>> ListTree = new ArrayList<ArrayList<ArrayList<String>>>();
         GetAllXml( ListTree, root);
         System.out.println(ListTree);

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

}
}

共有1个答案

轩辕远
2023-03-14

每个元素分为两个步骤:

  1. 将所有子元素添加到列表中
  2. 处理所有子元素

类似这样:

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<String>>> ListTree, Node node) {
    ArrayList<ArrayList<String>> child = new ArrayList<ArrayList<String>>();
    ArrayList<String> childOfChild = new ArrayList<String>();

    List<Element> children = getChildren(node);
    // add children node names
    for (Element e : children)
         childOfChild.add(e.getNodeName());

    if (childOfChild.size() > 0) {
        child.add(childOfChild);
        ListTree.add(child);
    }

    // process next level
    for (Element e : children)
        GetAllXml(ListTree, e);
}
 类似资料:
  • 本文向大家介绍js使用递归解析xml,包括了js使用递归解析xml的使用技巧和注意事项,需要的朋友参考一下 xml结构: 解析方法: 以上就是javascript使用递归解析XML的全部代码了,超级简洁,非常使用,给需要的小伙伴参考下。

  • 是否有开源库可以使用java解析junit xml,并获得执行的testsuite名称、testsuite对应的TestCase、失败次数和成功次数等信息?我刚刚看到了junit风格的报表工具,有没有开源库可以在Java中获取这些信息。

  • 问题内容: 我如何在Java或C中使用vtd-xml解析如下的xml文件? 任何帮助,将不胜感激。 谢谢 问题答案: 我想其中有些取决于您要如何解析文件。 这是一个“非生产”示例,其中使用了一些有用的技术,包括: XPath选择(此处仅使用“ / *”) 浏览所有同级节点 通过子节点向下看 使用AutoPilot将节点属性提取到地图中 希望能帮助到你 产生以下输出: 添加带有AutoPilot循环

  • 如何在java或C中使用vtd xml解析如下xml文件? 任何帮助都将不胜感激。 谢谢

  • 问题内容: 我试图简化我的代码:我想存储键和值(所有字符串)。 我实际上是使用A 来存储它。hat方法可以是值()或新节点()。 如何简化此代码?递归函数会很好。 问题答案: 假设您的最终目标只是将JSON反序列化为,那么使用Jackson可以简单得多。使用: 您将需要错误处理等,但这是一个很好的起点。

  • 我用一个递归函数尝试过它,它迭代语句,当语句不是文字时,它会跟随对象到达下一个节点。像这样: 但不知怎的,我用这个方法没有什么进展。非常感谢你的每一次洞察。