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

时间:2014-07-29 14:06:10

标签: xml groovy gsp xmlslurper streamingmarkupbuilder

在我提出这个问题之前,我会提供一些关于我实际上要做的事情的信息:

我需要在grails项目中重构大量的GSP文件。在我尝试编写自己的groovy脚本之后 - 并且意识到这对于我目前使用任何语言的技能水平来说太过分了 - 我发现this article,这对解析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

请注意,我不想在我的GSP文件中使用XML prolog;因此,我使用正则表达式删除它(这不是我的问题,但如果有人知道更多&#34; groovy&#34;这样做的方式,请告诉我!)

另外,我将namespacesFeature设置为false,因为命名空间对我来说是无用的。

因为它像HTML文件的魅力一样,我想我已经准备好递归遍历我的文件夹,找到名为list.gsp的所有GSP文件并自动重构它们。但是当我尝试使用一个list.gsp进行测试时,由于元素g的未绑定前缀g:set,序列化失败:

The prefix "g" for element "g:set" is not bound.

现在,我有点明白,我想要做的不是XML解析和序列化的常规目的。但就我而言,我不仅希望禁用命名空间功能,还希望解析器忽略所有GSP标记并将它们视为常规的开始和结束标记;换句话说,忽略任何标签中的双点。

我关心的另一件事是表达语言,例如<%@ page import="<class>" %>。现在我刚刚得到前面提到的例外,但这可能也需要解决。

任何帮助都是非常苛刻的。

0 个答案:

没有答案