我有YAML file
,其配置名称为 applications.yaml ,该数据将成为我的绑定:
applications:
- name: service1
port: 8080
path: /servier1
- name: service2
port: 8081
path: /service2
然后我有一个模板文件 applications.config :
<% applications.each { application -> %>
ApplicationName: <%= application.name %>
<% } $ %>
将所有内容放在一起:
@Grab('org.yaml:snakeyaml:1.17')
import org.yaml.snakeyaml.Yaml
Yaml parser = new Yaml()
Map data = parser.load(("applications.yaml" as File).text)
String template_content = new File('applications.config').text
def binding = [applications: data.applications]
def template = new groovy.text.GStringTemplateEngine().createTemplate(template_content).make(binding)
println template.toString()
现在的问题是:该过程的输出是:
ApplicationName: service1
ApplicationName: service2
但是我想要这个:
ApplicationName: service1
ApplicationName: service2
我不知道为什么那里有多余的空格。我想删除这些,但看不到如何,何时或以何种方式放置这些新行或破折行。
谢谢。
答案 0 :(得分:1)
例如从notepad ++(JSP语言)查看模板:
第一行<% applications.each { application -> %>
的末尾有一个CRLF
,它将在每个Application
,然后在下一行中另外CRLF
个Application
之后打印。
因此,每两个应用之间都有两个CRLF
答案 1 :(得分:1)
我观察到的(通过回答,评论和实践)是:我们在文件new Lines
中创建的所有applications.config
被认为是new line
输出。正如 daggett 所说,这是默认情况。
因此,在这里我只想显示可能的config
文件格式,可以按照您的要求在其中应用conditional logic
,对我来说还不错。例如:if()
application.config:
<% applications.each { application ->
if (application.valid) {%>\
Type :<%=application.valid%>
ApplicationName:<%=application.name%>
Path:<%=application.path%>
Port:<%=application.port%>
<%} else{%>\
--------------------
Found invalid Application : <%= application.name %>
--------------------\
<%}}%>
application.yaml
applications:
- name: service1
port: 8080
path: /servier1
valid: true
- name: service2
port: 8081
path: /service2
valid: false
code.groovy
@Grab('org.yaml:snakeyaml:1.17')
import org.yaml.snakeyaml.Yaml
Yaml parser = new Yaml()
Map data = parser.load(("applications.yaml" as File).text)
String template_content = new File('applications.config').text
def binding = [applications: data.applications]
def template = new groovy.text.GStringTemplateEngine().createTemplate(template_content).make(binding)
println template.toString()
输出:
Type :true
ApplicationName:service1
Path:/servier1
Port:8080
--------------------
Found invalid Application : service2
--------------------
答案 2 :(得分:0)
避免换行的唯一方法是按如下所示修复模板
<% applications.each { application -> %>ApplicationName: <%= application.name %>
<% } $ %>
结果
$ groovy test.groovy
ApplicationName: service1
ApplicationName: service2
或在下面的代码中处理换行符
@Grab('org.yaml:snakeyaml:1.17')
import org.yaml.snakeyaml.Yaml
Yaml parser = new Yaml()
Map data = parser.load(("applications.yaml" as File).text)
String template_content = new File('applications.config').text
def binding = [applications: data.applications]
def template = new groovy.text.GStringTemplateEngine().createTemplate(template_content).make(binding)
def output = template.toString().replaceAll(/^\n|\n$/, "").replaceAll(/\n{2,}/,"\n")
println output
结果
$ groovy test.groovy
ApplicationName: service1
ApplicationName: service2