繁体   English   中英

NIFI:如何更改Groovy代码中xml标记的值?

[英]NIFI: how to change value of xml tag in groovy code?

我想更改<run>标记值,这是我的xml文件示例:

<?xml version="1.0" encoding="UTF-8"?><service>
  <rs>
    <Cross>
      <details>
        <start>2016-01-05</start>
        <run>true</run>
        <makeVersion>1</makeVersion>
        <patch>this is  patch</patch>
        <parameter>7</parameter>
      </details>
    </Cross>
    <Cost>
      <details>
        <start>2017-09-07</start>
        <run>true</run>
        <makeVersion>1</makeVersion>
        <patch>this is  patch</patch>
        <parameter>1</parameter>
      </details>
    </Cost>
  </rs>

我想用FALSE代替RUN VALUE TRUE
这是我的代码,但它不起作用,也不会引发异常(我正在nifi环境中运行此代码)

  1. 我应该如何更改代码才能使其正常工作?

这是我的代码:

File file = new File("adress  here");
        String content = "";
        BufferedReader s;
        BufferedWriter w;
        RandomAccessFile ini= new RandomAccessFile(file, "rwd");
        FileLock lock= ini.getChannel().lock();

        try {
        String sCurrentLine;
            s = new BufferedReader(Channels.newReader(ini.getChannel(), "UTF-8"));


            while ((sCurrentLine = s.readLine()) != null) {
                content += sCurrentLine;
            }
            ini.seek(0);



            def xml = new XmlParser().parseText(content)
             Date  d=new Date();
            GregorianCalendar cal = new GregorianCalendar();
           cal.setTime(d);
            cal.add(Calendar.DATE,-(Integer.valueOf(parameter)));
             def currentDate=new Date().format( 'yyyy-MM-dd' );

               if(start!=currentDate &&  start!=cal.getTime().format("yyyy-MM-dd") ){
               def flowFile1=session.create()
                flowFile1 = session.putAttribute(flowFile1, "filename", "conf.xml");

                session.write(flowFile1, new StreamCallback() {
                    @Override
                    public void process(InputStream inputStream1, OutputStream outputStream) throws IOException {

                        outputStream.write(content.getBytes(StandardCharsets.UTF_8))
                    }

                });


                session.transfer(flowFile1,REL_SUCCESS);
                xml.'**'.findAll{it.name() == 'runAs'}.collect{it.replaceBody false}


               }
               /*else{
               xml.'**'.findAll{it.name() == 'runAs'}.collect{it.replaceBody false}

               }*/
                 def newxml=groovy.xml.XmlUtil.serialize(xml)

            String data =newxml;
            if (!data.isEmpty()) {
                ini.setLength(0);
                w = new BufferedWriter(Channels.newWriter(ini.getChannel(), "UTF-8"));
                w.write(data);
                lock.release();
                w.close();
                }


               }catch (FileNotFoundException e) {
            //e.printStackTrace();
            TimeUnit.SECONDS.sleep(50000);
        } catch (IOException e) {
            e.printStackTrace();

        } catch(OverlappingFileLockException e){ TimeUnit.SECONDS.sleep(50000);
            lock.release();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {

            //lock.release();
            ini.close();
        }

如果我正确理解您要查找的内容,请用您的代码替换此行:

xml.'**'.findAll{it.name() == 'your_node'}.each{ it.replaceBody 'false'}

根据您的问题,在此处将your_node替换为run

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM