Groovy和XML:无法插入处理指令

时间:2012-12-08 20:30:47

标签: xml groovy

方案

需要更新现有XML文件中的某些属性。该文件包含一个XSL处理指令,因此在解析和更新XML时,我需要在将指令再次写入文件之前添加该指令。问题是 - 无论我做什么 - 我都无法插入处理指令

基于Java-example found at rgagnon.com我创建了以下代码

示例代码##

import groovy.xml.*

def xml = '''|<something>
            |  <Settings>
            |  </Settings>
            |</something>'''.stripMargin()

def document = DOMBuilder.parse( new StringReader( xml ) )
def pi = document.createProcessingInstruction('xml-stylesheet', 'type="text/xsl"    href="Bp8DefaultView.xsl"');
document.insertBefore(pi, document.documentElement) 

println document.documentElement

创建输出

<?xml version="1.0" encoding="UTF-8"?>
<something>
  <Settings>
  </Settings>
</something>

我想要什么

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="Bp8DefaultView.xsl"?>
<something>
  <Settings>
  </Settings>
</something>

1 个答案:

答案 0 :(得分:1)

您在documentElement之前插入PI,但之后只将元素传递给println。如果您打印整个document

,它是否有效

如果不这样,输出DOM文档的“官方”方式是使用LSSerializer

def ser = document.implementation.createLSSerializer()
new File("output.xml").withOutputStream { o ->
  def lso = document.implementation.createLSOutput()
  lso.byteStream = o
  ser.write(document, lso)
}