将xml中的sql全部删选出来
- mybatis中的sql语句是写在main下的src中resources里面的;
- 递归遍历找到符合文件夹路径的xml文件;
- 再将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);//递归
}
}
}