Groovy XML: как анализировать, изменять и сериализовать содержимое файла GSP. (org.xml.sax.SAXParseException, префикс не связан)

Прежде чем задать этот вопрос, я предоставлю некоторую информацию о том, что я на самом деле пытаюсь сделать:

Мне нужно провести рефакторинг большого количества файлов GSP в моем проекте Grails. После того, как я попытался написать свой собственный отличный скрипт для этого - и понял, что это слишком много для моего текущего уровня владения любым языком - я нашел эту статью, которая мне очень помогла с анализом 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

Обратите внимание, что я не хочу пролог XML в моих файлах GSP; поэтому я удаляю его с помощью регулярных выражений (это не мой вопрос, но если кто-нибудь знает более "отличный" способ сделать это, пожалуйста, дайте мне знать!)

Кроме того, я установил namespacesFeature в ложь, так как пространства имен бесполезны для моей цели.

Поскольку это работало как HTML-файлы, я подумал, что готов рекурсивно перебрать мою папку и найти все файлы GSP с именем list.gsp и рефакторинг их автоматически. Но когда я попытался проверить это с одним list.gspсериализация не удалась из-за несвязанного префикса g для элемента g:set:

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

Теперь я вроде понимаю, что то, что я пытаюсь сделать, не является обычной целью анализа и сериализации XML. Но в моем случае я не только хочу отключить функцию пространств имен, но и хочу, чтобы анализатор игнорировал все теги GSP и рассматривал их как обычные открывающие и закрывающие теги; другими словами, игнорируйте двойные точки в любом теге.

Другая вещь, которая меня беспокоит, это язык выражения, такой как <%@ page import="<class>" %>, Прямо сейчас я получаю исключение, упомянутое ранее, но это, вероятно, также необходимо будет решить.

Любая помощь высоко ценится.

0 ответов

Другие вопросы по тегам