GroovyXML:如何解析、修改和序列化GSP文件的内容。(org.xml.sax.SAXParseException,前缀未绑定)

GroovyXML:如何解析、修改和序列化GSP文件的内容。(org.xml.sax.SAXParseException,前缀未绑定),xml,groovy,gsp,xmlslurper,streamingmarkupbuilder,Xml,Groovy,Gsp,Xmlslurper,Streamingmarkupbuilder,在我提出这个问题之前,我将提供一些关于我实际尝试做什么的信息: 我需要在grails项目中重构大量GSP文件。在我试着为此编写自己的groovy脚本之后——意识到这对于我目前的任何语言技能水平来说都太难了——我发现,这对我解析html内容有很大帮助 过了一段时间,我编写了自己的脚本来解析一个html文件,再次序列化并将其保存到一个新文件中。这是我的剧本: import groovy.xml.* @Grab(group='org.ccil.cowan.tagsoup',module='tagso

在我提出这个问题之前,我将提供一些关于我实际尝试做什么的信息:

我需要在grails项目中重构大量GSP文件。在我试着为此编写自己的groovy脚本之后——意识到这对于我目前的任何语言技能水平来说都太难了——我发现,这对我解析html内容有很大帮助

过了一段时间,我编写了自己的脚本来解析一个html文件,再次序列化并将其保存到一个新文件中。这是我的剧本:

import groovy.xml.*

@Grab(group='org.ccil.cowan.tagsoup',module='tagsoup', version='1.2' )

def tagsoupParser = new org.ccil.cowan.tagsoup.Parser()
tagsoupParser.setFeature(tagsoupParser.namespacesFeature, false)

def slurper = new XmlSlurper(tagsoupParser)
def xmlFile = 'list.gsp'
def htmlParser = slurper.parse(xmlFile)

/*

TODO: Manipulation code goes here

*/

def outputBuilder = new StreamingMarkupBuilder()
String result = XmlUtil.serialize(outputBuilder.bind{ mkp.yield htmlParser }) 

result =  result.replaceAll(/<\?.+\?>/, '')

def newFile = new File('neu.html')

newFile.text = result
导入groovy.xml* @抓取(group='org.ccil.cowan.tagsoup',module='tagsoup',version='1.2') def tagsoupParser=neworg.ccil.cowan.tagsoup.Parser() tagsoupParser.setFeature(tagsoupParser.namespacesFeature,false) def slurper=新的XmlSlurper(tagsoupParser) def xmlFile='list.gsp' def htmlParser=slurper.parse(xmlFile) /* TODO:这里是操作代码 */ def outputBuilder=新StreamingMarkupBuilder() String result=XmlUtil.serialize(outputBuilder.bind{mkp.yield htmlParser}) 结果=结果.replaceAll(/,“”) def newFile=新文件('neu.html') newFile.text=结果 注意,我不希望GSP文件中有XML序言;因此,我使用regex将其删除(这不是我的问题,但如果有人知道一种更“groovy”的方法,请让我知道!)

此外,我还将
namespacesFeature
设置为false,因为名称空间对我来说是无用的

因为这对HTML文件很有吸引力,我想我已经准备好递归地遍历我的文件夹,找到所有名为
list.GSP
的GSP文件并自动重构它们。但是当我尝试用一个
list.gsp
测试它时,序列化失败,因为元素
g:set
的前缀
g

元素“g:set”的前缀“g”未绑定。

现在,我有点明白了,我尝试做的不是XML解析和序列化的常规目的。但在我的例子中,我不仅希望解析器禁用名称空间特性,还希望解析器忽略所有GSP标记,并将它们视为常规的开始和结束标记;换句话说,忽略任何标记中的双点

我关心的另一件事是表达式语言,比如
。现在我刚刚得到前面提到的异常,但这可能也需要解决

非常感谢您的帮助