Статьи

Запись содержимого Groovy в groovy.util.slurpersupport.GPathResult (XmlSlurper) в виде XML

В предыдущем сообщении в блоге я описал использование XmlNodePrinter для представления XML, проанализированного с XmlParser, в хорошем формате для стандартного вывода, в виде строки Java и в новом файле. Поскольку XmlNodePrinter работает с экземплярами groovy.util.Node , он хорошо работает с XmlParser , но не очень хорошо работает с XmlSlurper, поскольку XmlSlurper работает с экземплярами groovy.util.slurpersupport.GPathResult, а не с экземплярами groovy.util.Node . В этом посте рассказывается о том, как groovy.xml.XmlUtil можно использовать для представления объектов GPathResult результате преобразования XML в стандартный вывод, в виде строки Java и в новый файл.

В первом листинге кода в этом посте демонстрируется использование XML- XmlSlurper с использованием XmlSlurper и запись этого GPathResult в стандартный вывод с использованием XmlUtil serialize (GPathResult, OutputStream) XmlUtil и дескриптора System.out .

slurpAndPrintXml.groovy: запись XML в стандартный вывод

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/env groovy
 
// slurpAndPrintXml.groovy
//
// Use Groovy's XmlSlurper to "slurp" provided XML file and use XmlUtil to write
// XML content out to standard output.
 
if (args.length < 1)
{
   println "USAGE: groovy slurpAndPrint.xml <xmlFile>"
}
 
String xmlFileName = args[0]
 
xml = new XmlSlurper().parse(xmlFileName)
 
import groovy.xml.XmlUtil
XmlUtil xmlUtil = new XmlUtil()
xmlUtil.serialize(xml, System.out)

В следующем листинге кода демонстрируется использование XmlUtil serialize (GPathResult) XmlUtil для сериализации GPathResult в String Java.

slurpAndSaveXml.groovy: запись XML в строку Java

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/env groovy
 
// slurpXmlToString.groovy
//
// Use Groovy's XmlSlurper to "slurp" provided XML file and use XmlUtil to
// write the XML content to a String.
 
if (args.length < 1)
{
   println "USAGE: groovy slurpAndPrint.xml <xmlFile>"
}
 
String xmlFileName = args[0]
 
xml = new XmlSlurper().parse(xmlFileName)
 
import groovy.xml.XmlUtil
XmlUtil xmlUtil = new XmlUtil()
String xmlString = xmlUtil.serialize(xml)
println "String:\n${xmlString}"

Третий листинг кода демонстрирует использование XmlUtil serialize (GPathResult, Writer) в GPathResult для записи GPathResult представляющего GPathResult XML, в файл через экземпляр FileWriter .

slurpAndPrintXml.groovy: запись XML в файл

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env groovy
 
// slurpAndSaveXml.groovy
//
// Uses Groovy's XmlSlurper to "slurp" XML and then uses Groovy's XmlUtil
// to write slurped XML back out to a file with the provided name. The
// first argument this script expects is the path/name of the XML file to be
// slurped and the second argument expected by this script is the path/name of
// the file to which the XML should be saved/written.
 
if (args.length < 2)
{
   println "USAGE: groovy slurpAndSaveXml.groovy <xmlFile> <outputFile>"
}
 
String xmlFileName = args[0]
String outputFileName = args[1]
xml = new XmlSlurper().parse(xmlFileName)
 
import groovy.xml.XmlUtil
XmlUtil xmlUtil = new XmlUtil()
xmlUtil.serialize(xml, new FileWriter(new File(outputFileName)))

Примеры в этом посте продемонстрировали написание / сериализацию XML, GPathResult объекты GPathResult с помощью методов XmlUtil . Класс XmlUtil также предоставляет методы для сериализации экземпляров XmlParser предоставляет XmlParser . Три метода, принимающие экземпляр Node , аналогичны трем методам выше для экземпляров GPathResult . Точно так же другие методы XmlUtil обеспечивают аналогичную поддержку XML, представленного в виде экземпляров org.w3c.dom.Element , Java String и groovy.lang.Writable .

xmlUtilSerializeMethods

Класс XmlNodePrinter в моем предыдущем посте в блоге, можно использовать для сериализации проанализированного XML- XmlParser представленного в виде Node . Класс XmlUtil также можно использовать для сериализации проанализированного XML- XmlParser представленного в виде Node но дает дополнительное преимущество, заключающееся в возможности сериализации XmlSlurperXmlSlurper с блочностью, представленного в виде GPathResult .