文件夹中遍历检索xml文件中的sql

将xml中的sql全部删选出来

  1. mybatis中的sql语句是写在main下的src中resources里面的;
  2. 递归遍历找到符合文件夹路径的xml文件;
  3. 再将xml文件中的查询SQL语句遍历出来即可(增删改本次未写);

XML中部分内容展示

输出结果样式:

 

源码:

package demo;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * @Author 小方同学
 * @create 2020/8/29 19:51
 */
public class Demo {
    public static void main(String[] args) throws DocumentException {

        File file = new File("G:\\test");//定义文件根目录
        ArrayList<String> list = new ArrayList<>();
        list=listFile(file);
        System.out.println("====================================================================================");
//        ArrayList<String> list = new ArrayList<>();
//        list.addAll(listFile(file));
//        System.out.println(listxml(""));


        for (int i = 0; i < list.size() ; i++) {

//            System.out.println("=========="+list.get(i));
            SAXReader sax = new SAXReader();//创建一个SAXReader对象
            File xmlFile = new File(list.get(i));//根据指定的路径创建file对象
            Document document = sax.read(xmlFile);//获取document对象,如果文档无节点,则会抛出Exception提前结束
            Element root = document.getRootElement();//获取根节点
            getNodes(root);//从根节点开始遍历所有节点

        }




    }

    /*
     * 遍历文件夹
     * */
    static ArrayList<String> xmllist = new ArrayList<>();//存储目录中含有src、main、resources的文件路径

    public static ArrayList<String> listFile(File file) {


        ArrayList<String> filelist = new ArrayList<>();//存储所有带xml文件的文件路径

//        List xmllist = new ArrayList();
        File[] files = file.listFiles();
        for (File file2 : files) {
            if (file2.isFile() && file2.getName().endsWith(".xml")) {//如果是文件且文件后缀为.xml,则将目录保存至集合中
//                System.out.println(file2.getAbsolutePath());
                filelist.add(file2.getAbsolutePath());
//                System.out.println(file2.getName()+"==========");
//                System.out.println(file + "*****************");
//                filelist.add(file.toString());
                //        System.out.println("符合条件的XML文件路径:" + filelist);


            } else if (file2.isDirectory()) {//如果是目录 进行递归调用
                listFile(file2);

            }
        }

        for (int i = 0; i < filelist.size(); i++) {//先判断文件路径是否包含src、main、resources,然后再输出到xmllist集合中

            if (filelist.get(i).indexOf("src") != -1) {

//                System.out.println("集合中存在"+"main这个字符串"+filelist.get(i));
                if (filelist.get(i).indexOf("main") != -1) {

//                    System.out.println("集合中存在"+"src这个字符串"+filelist.get(i));
                    if (filelist.get(i).indexOf("resources") != -1) {

//                        System.out.println("符合条件的XML文件路径:" + filelist.get(i));
                        xmllist.add(filelist.get(i));
                        System.out.println(xmllist.get(i)+"======");
                    }

                }

            }

        }

        return  xmllist;
    }


    public static void getNodes(Element node) {
//        System.out.println(node);
//        System.out.println("--------------------");

        //当前节点的名称、文本内容和属性
//        System.out.println("当前节点名称:"+node.getName());//当前节点名称
//        System.out.println("当前节点的内容:"+node.getTextTrim());//当前节点内容,去空格换行


        List<Attribute> listAttr = node.attributes();//当前节点的所有属性的list


//        for(Attribute attr:listAttr){//遍历当前节点的所有属性
//            String name=attr.getName();//属性名称
//            String value=attr.getValue();//属性的值
//            System.out.println("属性名称:"+name+"属性值:"+value);
//        }

        ArrayList<String> ifText = new ArrayList<>();
        if (node.getName().equals("select")) {
            String str = " ";
//            System.out.println(node.getTextTrim()+"+++++");

            for (Iterator it = node.elementIterator(); it.hasNext(); ) {
                Element element1 = (Element) it.next();
//                System.out.println(element1.getName()+"=======");
//                System.out.println(element1.getTextTrim()+"=======");

                if (element1.getName().equals("if")) {//判断是否有if子节点,如果有就存入集合
                    ifText.add(element1.getTextTrim());

                }


//                System.out.println(str );
                // do something
            }
            for (int i = 0; i < ifText.size(); i++) {//if中的内容进行拼接
                str += " " + ifText.get(i);

            }

            String str1 = node.getTextTrim() + " " + str + ";";//拼接成最终sql
            System.out.println(str1);
        }

        //递归遍历当前节点所有的子节点
        List<Element> listElement = node.elements();//所有一级子节点的list
        for (Element e : listElement) {//遍历所有一级子节点
            getNodes(e);//递归
        }
    }


}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值