如何使用Parser实例编写XML文件? [英] How to write an XML to file, with just a Parser instance?

查看:217
本文介绍了如何使用Parser实例编写XML文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的Groovy代码:

  // ... 
def xml = new XmlParser()。解析(文件名)
xml.each {e - >
//正在对XML
进行一些更改xml.append(test,test me)
}
def writer = new FileWriter(newFileName)
new XmlNodePrinter(new PrintWriter(writer))。print(xml)

代码有效,但输出XML有很多不必要的空白。看起来我在写入文件时做错了。



ps。感谢蒂姆,这是它应该如何工作的(上面例子的最后一行应该被这三行代替):

  def printer = new XmlNodePrinter(new PrintWriter(writer))
printer.preserveWhitespace = true
printer.print(xml)


解决方案

如果您替换:

  def writer = new FileWriter(newFileName)
new XmlNodePrinter(new PrintWriter(writer))。print(xml)


$
$ b

新文件(newFilename).withWriter {out  - > 
printer = new XmlNodePrinter(out)
printer.preserveWhitespace = true
printer.print(xml)
}

$ b

- 编辑 -



正如指出的那样, preserveWhitespace = false ,但是如果您尝试以下测试代码:

  def x =< langs type =current> 
< language> Java< / language>
< language> Groovy< / language>
< language> ; JavaScript< / language>
< / langs>

def xml = new XmlParser()。parseText(x)
xml.appendNode'language',' Ruby'

def printIt = {node,pw - >
printlnwith preserveWhitespace = $ pw:
def s = new StringWriter()
printer = new XmlNodePrinter(new PrintWriter(s))
printer.preserveWhitespace = pw
printer.print(xml)
println s
}

printIt xml,true
printIt xml,false



您得到输出:

  With preserveWhitespace = true:
< langs type =当前>
< language> Java< / language>
< language> Groovy< / language>
< language> JavaScript< / language>
< language> Ruby< / language>
< / langs>

With preserveWhitespace = false:
< langs type =current>
< language>
Java
< / language>
< language>
Groovy
< / language>
< language>
JavaScript
< / language>
< language>
Ruby
< / language>
< / langs>


This is my Groovy code:

// ...
def xml = new XmlParser().parse(fileName)
xml.each { e ->
  // some changes are being made to XML
  xml.append("test", "test me")
}
def writer = new FileWriter(newFileName)
new XmlNodePrinter(new PrintWriter(writer)).print(xml)

The code works, but the output XML has a lot of unnecessary white spaces. Looks like I'm doing something wrong with writing to file.

ps. Thanks to Tim, this is how it should work (the last line of the example above shall be replaced with these three lines):

def printer = new XmlNodePrinter(new PrintWriter(writer))
printer.preserveWhitespace = true
printer.print(xml)

解决方案

What happens if you replace:

def writer = new FileWriter(newFileName)
new XmlNodePrinter(new PrintWriter(writer)).print(xml)

with:

new File( newFilename ).withWriter { out ->
  printer = new XmlNodePrinter( out )
  printer.preserveWhitespace = true
  printer.print( xml )
}

-- edit --

As pointed out, it feels like it should be preserveWhitespace = false, however if you try the following test code:

def x = """<langs type="current">
  <language>Java</language>
  <language>Groovy</language>
  <language>JavaScript</language>
</langs>"""

def xml = new XmlParser().parseText( x )
xml.appendNode 'language', 'Ruby'

def printIt = { node, pw ->
  println "With preserveWhitespace=$pw:"
  def s = new StringWriter()
  printer = new XmlNodePrinter( new PrintWriter( s ) )
  printer.preserveWhitespace = pw
  printer.print( xml )
  println s
}

printIt xml, true
printIt xml, false

You get the output:

With preserveWhitespace=true:
<langs type="current">
  <language>Java</language>
  <language>Groovy</language>
  <language>JavaScript</language>
  <language>Ruby</language>
</langs>

With preserveWhitespace=false:
<langs type="current">
  <language>
    Java
  </language>
  <language>
    Groovy
  </language>
  <language>
    JavaScript
  </language>
  <language>
    Ruby
  </language>
</langs>

这篇关于如何使用Parser实例编写XML文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆