=_= 话不多说!直接上代码!=_=
1、XmlUtil.java xml解析工具类
public class XmlUtil {
private static String dicName = "";
private static String dicValue = "";
// 用于存储需要的数据
private static List<Map<String, String>> paramlist = new ArrayList();
/**
* 找到所有xml文件,并进行解析
* @param strPath 文件路径
* @param name 检索的属性名称
* @param value 检索的属性值
* @throws Exception
*/
public static void refreshFileList(String strPath, String name, String value){
// 设置需要检索的值
dicName = name;
dicValue = value;
// 创建文件对象
File dir = new File(strPath);
File[] files = dir.listFiles();
if (files == null) {
return;
}
// 遍历当前目录下所有的文件和文件夹
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) { // 文件夹
refreshFileList(files[i].getAbsolutePath(), name, value);
} else { // 文件
// 判断是否为xml文件
if (files[i].getAbsoluteFile().getName().split("\\.")[1].equals("xml")) {
// 解析xml文件
parseFile(files[i].getAbsoluteFile());
}
}
}
}
/**
* 将xml文件解析成Document对象
* @param filePath
*/
public static void parseFile(File filePath) {
// 1.创建DocumentBuilderFactory对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
// 2.创建DocumentBuilder对象
DocumentBuilder builder = factory.newDocumentBuilder();
// 3.将xml文件解析成Document对象
Document document = builder.parse(filePath);
// 4.获取根节点 model:Model为标签名称
NodeList sList = document.getElementsByTagName("model:Model");
// 5.通过Element方式解析并获取使用字典的字段
Map<String, String> parMap = element(sList);
// 6.存入需要的数据
if (!parMap.isEmpty()) {
paramlist.add(parMap);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 用Element方式获取节点信息以及所有属性信息
* @param list
*/
public static Map<String, String> element(NodeList list) {
Map<String, String> parMap = new HashMap<>();
for (int i = 0; i < list.getLength(); i++) {
Element element = (Element) list.item(i);
// 获取所有attribute标签
NodeList attribute = element.getElementsByTagName("attribute");
for (int j = 0; j < attribute.getLength(); j++) {
// 判断是否有属性
if (attribute.item(j).hasAttributes()) {
Map<String, String> map = new HashMap<>();
// 存在则获取所有的属性
NamedNodeMap attributes = attribute.item(j).getAttributes();
for (int k = 0; k < attributes.getLength(); k++) {
// 属性名
String nodeName = attributes.item(k).getNodeName();
// 属性值
String nodeValue = attributes.item(k).getNodeValue();
// 拿到属性名称和属性值
if ("name".equals(nodeName)) {
map.put("name", nodeValue);
}
if ("value".equals(nodeName)) {
map.put("value", nodeValue);
}
}
// 判断是否使用的院系字典
if (dicName.equals(map.get("name")) && dicValue.equals(map.get("value"))) {
// 获取使用了字典的字段
Node parentNode = attribute.item(j).getParentNode();
if (parentNode.hasAttributes()) {
// 所有的属性
NamedNodeMap attributes1 = parentNode.getAttributes();
for (int l = 0; l < attributes1.getLength(); l++) {
parMap.put(attributes1.item(l).getNodeName(), attributes1.item(l).getNodeValue());
}
}
// 文件路径存入
parMap.put("url", parentNode.getOwnerDocument().getDocumentURI());
}
map.clear();
}
}
}
return parMap;
}
/**
* 讲数据写入txt文件中
* @param writePath 写入的路径
* @throws Exception
*/
public void writeData(String writePath) throws Exception {
// 拼接内容
StringBuffer stringBuffer = new StringBuffer();
paramlist.forEach(e -> {
stringBuffer.append(e.get("url") + " ======= " + e.get("caption") + " ======= " + e.get("name") + "\n");
});
File file = new File(writePath);
File parentFile = file.getParentFile();
// 文件夹不存在,创建文件夹
if (!parentFile.exists()) {
parentFile.mkdirs();
}
// 创建文件
file.createNewFile();
FileOutputStream fileOutputStream = new FileOutputStream(file);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(fileOutputStream));
// 写入数据
writer.write(String.valueOf(stringBuffer));
writer.close();
System.out.println("文件写入完毕");
}
}
2、测试代码
public static void main(String[] args) throws Exception {
long a = System.currentTimeMillis();
XmlUtil xmlUtil = new XmlUtil();
// 设置需要检索的属性名和值
xmlUtil.refreshFileList("D:\\my\\file_test", "dic", "d-b122-sad-2d3q-12");
xmlUtil.writeData("D:\\my\\outfile\\file1.txt");
System.out.println("消耗时长:" + (System.currentTimeMillis() - a));
}
解析xml方式还有很多种,这只是其中一种,可以参考:Java XML解析 - 利用dom(org.w3c.dom)解析XML文章来源:https://www.toymoban.com/news/detail-634446.html
文章来源地址https://www.toymoban.com/news/detail-634446.html
到了这里,关于解析xml文件,获取需要的数据并写入txt文件中的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!