需要更新现有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>
答案 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)
}