java读取解析XML小结

java读取XML文件小结

java读取XML文件

最近开发碰到对XML文件进行解析,查找了很多资料,总结一个自己喜欢用的一种模式,java代码如下:

	 	SAXReader reader = new SAXReader();
        String rootPath = System.getProperty("user.dir").replace("\\", "/");
        //File file = new File(rootPath+"/config.xml");
        File file = new File("src\\main\\resources\\config.xml");
        System.out.println(rootPath + "/config.xml");
        Document document = reader.read(file);
        Element root = document.getRootElement();
        List<Element> childElements = root.elements();
        ArrayList<ProcessDev> processDevArrayList=new ArrayList<>();
        //ProcessDev processDev=new Process
        for (Element child : childElements) {
            //已知属性名情况下
            String id =child.attributeValue("id");
            String time=child.elementText("restime");
            String name=child.elementText("name");
            List<Element> processnamesXml=child.element("processnames").elements();
            ArrayList<String> processnames=new ArrayList<>();
            for(Element el_processname : processnamesXml){
                processnames.add(el_processname.getText());
            }

xml文件结构如下:

<?xml version="1.0" encoding="UTF-8"?>
<configs> 
  <!--一个config代表一个设备-->  
  <config id="105"> 
    <restime>60</restime>  
    <url>http://127.0.0.1:80</url>  
    <name>fdf</name>  
    <processnames> 
      <processname>Code.exe</processname>  
      <processname>chrome.exe</processname> 
    </processnames>  
    <flag>true</flag> 
  </config>  
  <config id="106"> 
    <restime>60</restime>  
    <url>http://127.0.0.1:80</url>  
    <name>FIR</name>  
    <processnames> 
      <processname>QQMusic.exe</processname> 
    </processnames>  
    <flag>true</flag> 
  </config> 
</configs>

java修改XML文件

修改XML文件代码如下,通过对XML修改将内存的内容写入文件中:

 public static ProcessDev ModifyXMLFile(String json) throws DocumentException, IOException {

        try {
            JSONObject jsonObject = JSONObject.fromObject(json);
            String time = jsonObject.getString("time");
            String name = jsonObject.getString("name");
            String URI = jsonObject.getString("URI");
            List<String> processnames= jsonObject.getJSONArray("processnames");
            String flag = jsonObject.getString("flag");
            String id = jsonObject.getString("id");
            ProcessDev person = new ProcessDev(processnames, URI, Integer.parseInt(time), Boolean.valueOf(flag),name);
            person.setId(id);
            String rootPath = System.getProperty("user.dir").replace("\\", "/");
            //File file = new File(rootPath + "/config.xml");
            File file = new File("src\\main\\resources\\config.xml");
            SAXReader reader = new SAXReader();
            Document document = reader.read(file);
            Element root = document.getRootElement();
            List<Element> childElements = root.elements();
            for (Element child : childElements) {
                if(child.attributeValue("id").equals(id)) {
                    Element restime = child.element("restime");
                    restime.setText(time);
                    Element url = child.element("url");
                    url.setText(URI);
                    if(processnames.size()!=0) {
                        List<Element> processnamesXml = child.elements("processnames");
                        for (int i = 0; i < processnamesXml.size(); i++) {
                            // System.out.println();
                            processnamesXml.get(i).element("processname").setText(processnames.get(i));
                        }
                    }
                    Element fl = child.element("flag");
                    fl.setText(flag);
                }
            }
            document.setRootElement(root);
            saveDocument(document, file);
            return person;
        }catch (Exception E){
            System.out.println(E.getMessage());
            return null;
        }

    }
 public static void saveDocument(Document document, File xmlFile) throws IOException, FileNotFoundException {
        Writer osWrite = new OutputStreamWriter(new FileOutputStream(xmlFile));// 创建输出流
        OutputFormat format = OutputFormat.createPrettyPrint(); // 获取输出的指定格式
        format.setEncoding("UTF-8");// 设置编码 ,确保解析的xml为UTF-8格式
        XMLWriter writer = new XMLWriter(osWrite, format);// XMLWriter
        // 指定输出文件以及格式
        writer.write(document);// 把document写入xmlFile指定的文件(可以为被解析的文件或者新创建的文件)
        writer.flush();
        writer.close();
    }
    ```
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值