<?xml version="1.0" encoding="GBK"?>
<sbbQysds2008JdAZb>
<head>
<publicHead>
<sbh>识别号</sbh>
<mc>名称</mc>
<sssq>
<rqQ>所属日期起</rqQ>
<rqZ>所属日期止</rqZ>
</sssq>
<dymm>打印密码</dymm>
</publicHead>
<privateHead>
<dbr>代表人</dbr>
<kjzg>会计主管</kjzg>
</privateHead>
</head>
</sbbQysds2008JdAZb>
求解析成:
sbbQysds2008JdAZb.head.publicHead.sbh
sbbQysds2008JdAZb.head.publicHead.mc
sbbQysds2008JdAZb.head.publicHead.sssq.rqQ
.......

解决方案 »

  1.   

    以拼接“sbbQysds2008JdAZb.head.publicHead.sbh”为例:            Document doc = initDom(xml);//用你自己的写法将xml转成Document
                StringBuilder sb = new StringBuilder();
                Element root = doc.getRootElement();
                sb.append(root.getName());
                Element temp = root;
                boolean flag = true;
                while (flag) {
                    if (temp.elements() != null && temp.elements().size() > 0) {
                        temp = (Element) temp.elements().get(0);
                        sb.append(".").append(temp.getName());
                    } else {
                        flag = false;
                    }
                }
                System.out.println(sb.toString());转成Document之后,后面的写法应该很通用吧,我用的是dom4j。
      

  2.   

    xml文档很大,深度也不知道,元素名字也不确定.
    你这种写法,当解析到 <rqQ>所属日期起</rqQ>,会用问题的
      

  3.   

    深度不确定就是一直往下找elements,我那个flag看到没。
    广度用elements.size确定,剩下的就是你的怎么设计循环的逻辑能力了。
    作为指点,我感觉给的够详细了
      

  4.   

    我的while循环不知道你看懂没有,每次都是向下找一层,然后取得该层的第一个元素再向下找直到找到叶子结点,这个层次就是逐渐向下直到叶子为止。
    你只要照着这个原理,追加上广度的遍历,就能得到dom树的所有路径了。
      

  5.   

    最后说一句,你也可以先找出所有的叶子结点,然后对于每个叶子结点一直getParent,每个节点的父节点是唯一的,注意这是逆向逻辑,处理好提取出来的name。
    关机...走人
      

  6.   

    LZ要完成的功能是什么,仅仅是拿到路径?如果是这样的话,给你个小工具,自己当了去用看看
    http://topic.csdn.net/u/20120223/21/f6a49933-f7f6-4280-b106-e8be9bbb379e.html