Chcę utworzyć XML i zapisać go w pliku. poniżej jest częścią kodu

  def fileWriter = new FileWriter("c:/temp/test.xml")
  def xml = new groovy.xml.MarkupBuilder(fileWriter).event {
    event ("xmlns" : "http://www.hp.com/2009/software/opr/data_model") {
      state("closed")
    }
//    fileWriter.close();        
  }
  fileWriter.close();

Działa dobrze i utwórz plik XML w katalogu C: TEMP.

I tak wygląda.

<event>
<event xmlns='http://www.hp.com/2009/software/opr/data_model'>
<state>closed</state>
</event>
</event>

Ale czego chcę, jest po prostu

<event xmlns='http://www.hp.com/2009/software/opr/data_model'>
<state>closed</state>
</event>

Jak uniknąć najpierw i ostatnio od wyjścia XML?

0
ro ra 16 luty 2017, 13:23

2 odpowiedzi

Najlepsza odpowiedź

Pozbyć się dodatkowego event:

import groovy.xml.MarkupBuilder

def fileWriter = new FileWriter("c:/temp/test.xml")

new MarkupBuilder(fileWriter).event("xmlns": "http://www.hp.com/2009/software/opr/data_model") {
    state("closed")
}

fileWriter.close();
2
Robby Cornelissen 16 luty 2017, 10:35

Wywołujesz wydarzenie dwa razy, więc otrzymasz dwa tagi zdarzeń.
Nazwij to raz i dostajesz tylko jeden.
Boks, że zalecałem użycie withWriter() jak

new File(/c:\temp\test.xml/).withWriter {
  def xml = new groovy.xml.MarkupBuilder(it).event(xmlns: 'http://www.hp.com/2009/software/opr/data_model') {
    state 'closed'
  }
}

Nie ma potrzeby ręcznego zamykania pisarza.

2
Vampire 17 luty 2017, 09:40