Статьи

Выход из XML с помощью Groovy 2.1

При публикации исходного кода в моем блоге мне часто нужно преобразовывать меньше, чем знаки (<), и больше, чем знаки (>), в соответствующие ссылки на сущности, чтобы они не путались как теги HTML, когда браузер отображает вывод. Я часто делал это, используя быстрый синтаксис поиска и замены, такой как %s/</\&lt;/g и %s/>/\&gt;/g с vim или Perl. Однако Groovy 2.1 представил метод для этого, и в этой статье я продемонстрирую скрипт Groovy, который использует этот метод groovy.xml.XmlUtil.escapeXml (String) .

escapeXml.groovy

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/env groovy
/*
 * escapeXml.groovy
 *
 * Requires Groovy 2.1 or later.
 */
if (args.length < 1)
{
   println "USAGE: groovy escapeXml.groovy <xmlFileToBeProcessed>"
   System.exit(-1)
}
def inputFileName = args[0]
println "Processing ${inputFileName}..."
def inputFile = new File(inputFileName)
String outputFileName = inputFileName + ".escaped"
def outputFile = new File(outputFileName)
if (outputFile.createNewFile())
{
   outputFile.text = groovy.xml.XmlUtil.escapeXml(inputFile.text)
}
else
{
   println "Unable to create file ${outputFileName}"
}

Метод XmlUtil.escapeXml предназначен для того, чтобы, как утверждает его GroovyDoc , «экранировать следующие символы» и <> со своими объектами XML ». Запуск исходного кода через него помогает преобразовать символы в ссылки на сущности XML, которые будут правильно отображаться браузером. Это особенно полезно, например, для кода Java, который использует дженерики.

Groovydoc утверждает, что поддерживаются следующие преобразования из символов в соответствующие ссылки на сущности:

Символ сущность
Ссылка
« & Quot;
& APOS;
& & Amp;
< & Лт;
> & Gt;

Одним из преимуществ этого подхода является то, что я могу экранировать все пять из этих специальных символов во всей строке или файле одной командой вместо одного символа за раз.

Groovydoc для этого метода XmlUtil.escapeXml также утверждает, что этот метод не делает:

  • «Не экранирует управляющие символы» [для этого используйте XmlUtil.escapeControlCharacters (String) ]
  • «Не поддерживает DTD или внешние объекты»
  • «Не относится к суррогатным парам специально»
  • «Не выполняет проверку Юникода на своем входе»

В моем примере выше показан файл сценария Groovy, в котором используется XmlUtil.escapeXml(String) , но его также можно запускать в командной строке. Это делается в DOS, например, как показано здесь:

1
type escapeXml.groovy | groovy -e "println groovy.xml.XmlUtil.escapeXml(System.in.text)"

Эта команда, которая только что показана, возьмет предоставленный файл (в данном случае сам escapeXml.groovy) и выдаст вывод с конкретными символами, замененными ссылками на сущности. В Linux / Unix это может быть обработано таким же образом с помощью «cat», а не «type». Это показано на следующем снимке экрана.

inlineEscapeXmlGroovy

В этом сообщении блога показано, как XmlUtil.escapeXml(String) можно использовать в сценарии или в командной строке, чтобы экранировать некоторые обычно проблемные символы XML для ссылок на их сущности. Хотя здесь это и не показано, такой код также можно встроить в Java-приложение.

Ссылка: уйти от XML с помощью Groovy 2.1 от нашего партнера по JCG Дастина Маркса в блоге Inspired by Actual Events .