今天有个朋友给了我一个xml文件,几千行左右,让我帮她写个Demo,实现删除一些元素和属性的功能。
例子如下
需求如下:
实现方法我觉得有两种,一种是通过如 dom4j 之类的工具解析 xml,然后操作 xml 节点;另一种是通过正则表达式字符串替换
这里选择后者,通过正则替换,因为文件不大,可以一次性读取所有的内容,实现代码如下
例子如下
- <?xml version="1.0" encoding="utf-8"?>
- <!DOCTYPE population SYSTEM "http://www.matsim.org/files/dtd/population_v6.dtd">
- <population>
- <person id="0">
- <plan selected="yes">
- <activity type="home" link="30263" x="1.1587762319108987E7" y="3594363.525306449" end_time="09:46:37" >
- </activity>
- <leg mode="car" dep_time="09:46:37" >
- </leg>
- <activity type="home" link="22096" x="1.1587164533443427E7" y="3587487.902932038" >
- </activity>
- </plan>
- </person>
- <person id="1">
- <plan selected="yes">
- <activity type="home" link="4714" x="1.1585743985421415E7" y="3602582.1929422976" end_time="15:33:05" >
- </activity>
- <leg mode="car" dep_time="15:33:05" >
- </leg>
- <activity type="home" link="24738" x="1.1584318094063845E7" y="3579553.166465933" >
- </activity>
- </plan>
- </person>
- </population>
需求如下:
- 删除 leg 元素
- 删除 x 和 y 属性
- 替换 type="home" 为 type="activity"
实现方法我觉得有两种,一种是通过如 dom4j 之类的工具解析 xml,然后操作 xml 节点;另一种是通过正则表达式字符串替换
这里选择后者,通过正则替换,因为文件不大,可以一次性读取所有的内容,实现代码如下
- import java.io.*;
- /**
- * @author 言曌
- * @date 2019-10-11 16:10
- */
- public class Demo {
- /**
- * 从文件里读取内容
- *
- * @param filePath
- * @return
- */
- private static String readFromFile(String filePath) {
- // 使用ArrayList来存储每行读取到的字符串
- StringBuilder sb = new StringBuilder();
- try {
- FileReader fr = new FileReader(filePath);
- BufferedReader bf = new BufferedReader(fr);
- String str;
- // 按行读取字符串
- while ((str = bf.readLine()) != null) {
- sb.append(str + "\r\n");
- }
- bf.close();
- fr.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return sb.toString();
- }
- /**
- * 往文件中写入内容
- *
- * @param outputFilePath 输出文件路径
- * @param content
- */
- public static void writeToFile(String outputFilePath, String content) {
- File file = new File(outputFilePath);
- try {
- FileWriter writer = new FileWriter(file);
- writer.write(content);
- writer.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- /**
- * 修改
- * @param args
- */
- public static void main(String[] args) {
- //1. 一次性读取该文件所有内容
- String content = readFromFile("/Users/liuyanzhao/Downloads/population.xml");
- //2. 处理数据
- //2.1 去掉<leg></leg>标签里的内容和leg标签
- content = content.replaceAll("(?<=<leg)[\\s\\S]*?(?=</leg>)", "");
- content = content.replaceAll("<leg</leg>", "");
- //2.2 去掉x=""标签
- content = content.replaceAll("x=\"[^\"]*\"", "");
- //2.3 去掉y=""标签
- content = content.replaceAll("y=\"[^\"]*\"", "");
- //2.4 替换 type="home"为type="activity"
- content = content.replaceAll("type=\"home\"", "type=\"activity\"");
- System.out.println(content);
- //3. 新内容输出到文件
- writeToFile("/Users/liuyanzhao/Downloads/population-output.xml", content);
- }
- }
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏