xml - 如何仅使用 Parser 实例将 XML 写入文件?

标签 xml groovy

这是我的 Groovy 代码:

// ...
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)

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

附言。感谢 Tim,它应该是这样工作的(上面示例的最后一行应替换为这三行):

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)

与:

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

-- 编辑 --

正如所指出的,感觉应该是 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 ->
  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

你得到输出:

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>

关于xml - 如何仅使用 Parser 实例将 XML 写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5142967/

相关文章:

java - Jenkins 2.0 管道 println 不工作

php - javascript + 发送带有 URL 的多个字符串

javascript - 如何在html页面中显示xml数据?

groovy - 如何为 switch case 语句设置空或非空条目?

java - 使用 root loader 加载 jar

java - 有什么办法可以解决 Maven 模块中的循环依赖吗?

groovy - 使用 groovy 附加到文件中的特定行号

java - 无法从 editText 获取文本

java - 具有 2 个对象适配器的 ListView 无法正常工作

ruby-on-rails - 如何在 Nokogiri 中创建具有属性和值的 xml 元素