0

设想

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

基于在 rgagnon.com 上找到的 Java 示例,我创建了以下代码

示例代码##

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>
4

1 回答 1

1

您在 PI 之前插入 PI documentElement,但随后仅将元素传递给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)
}
于 2012-12-08T20:39:50.523 回答