Я новичок в groovy (несколько недель опыта). В настоящее время я пытаюсь обрабатывать некоторые визуальные студийные файлы .vcproj
с помощью groovy: заменяя некоторые пути, которые будут найдены шаблонами регулярных выражений. Это отлично работает для меня.Groovy: сохранение CR/LF атрибутов при сериализации XMLSlurper
Для записи изменений в файл, я использую метод
XmlUtil.serialize(slurper, writer)
, где
def writer = new FileWriter(outputFile)
и
def slurper = new XmlSlurper(keepIgnorableWhitespace:true).parse(it)
Это также работает отлично, за исключением одной вещи , В оригинальном vcproj
файле каждый атрибут находится в отдельной строке, например:
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
InheritedPropertySheets="..\..\..\..\Test_Debug.vsprops"
CharacterSet="2"
>
, но после вызова serialize()
метода XMLUtil
класса, весь вывод сохраняется в одной строке:
<Configurations>
<Configuration Name="Debug|Win32" InheritedPropertySheets="..\..\..\..\Test_Debug.vsprops" OutputDirectory="$(ConfigurationName)" IntermediateDirectory="$(ConfigurationName)" ConfigurationType="1" CharacterSet="2">
для анализатора XMS это не должно быть проблемой, но в постобработке некоторые скрипты perl используют этот файл vcproj
, и они жалуются на отсутствие CR/LF в строке атрибута.
Итак, есть ли простая возможность настроить XMLslurper
или сериализованный класс, чтобы поддерживать CR/LF между каждым атрибутом?
благодаря Will P для вашего предложения. это хорошая идея добавить CR/LF (newline) к каждому атрибуту, который можно найти с помощью reg exp. Я проверю, хорошо ли это для моей цели. –
В настоящее время этот пример отлично работает, я ввел две модификации: 1) it + "\ n \ t" // изменил порядок 2) replaceAll (/ [0-9a-zA-Z] * = "[^ \ "] *" /) // добавленные номера –