languages.xml
<languages> <language name="C++"> <author>Stroustrup</author> </language> <language name="Java"> <author>Gosling</author> </language> <language name="Lisp"> <author>McCarthy</author> </language> <language name="Modula-2"> <author>Wirth</author> </language> <language name="Oberon-2"> <author>Wirth</author> </language> <language name="Pascal"> <author>Wirth</author> </language> </languages>languagesWithNS.xml
<languages xmlns:computer="Computer" xmlns:natural="Natural"> <computer:language name="Java" /> <computer:language name="Groovy" /> <computer:language name="Ruby" /> <natural:language name="Chinese" /> <natural:language name="English" /> <natural:language name="French" /> </languages>使用DOM API,结合GPath 对xml进行解析,要想使用DOMCategory,必须把代码放在use()块内
import groovy.xml.dom.DOMCategory /** *使用DOM API,结合GPath 对xml进行解析,要想使用DOMCategory,必须把代码放在use()块内 */ class DOMCategoryExample { public static void main(String[] args) { def document = groovy.xml.DOMBuilder.parse(new FileReader("src/com/mstar/xml/languages.xml")) def rootElement = document.documentElement use(groovy.xml.dom.DOMCategory) { println "Languages and authors" def languages = rootElement.language languages.each{language -> println "${language.'@name'} authored by ${language.author[0].text()}" } def languageByAuthor = {author -> languages.findAll{it.author[0].text() == author}.collect{it.'@name'}.join(',') } println "Languages by Wirth: " + languageByAuthor('Wirth') } } }xmlSlurper解析xml
class UsingXMLSlurper { public static void main(String[] args) { def languages = new XmlSlurper().parse("src/com/mstar/xml/languages.xml") println "Languages and author.." languages.language.each{println "${it.'@name'} authored by ${it.author.text()}"} def languageByAuthor = {author -> languages.language.findAll{it.author[0].text() == author}.collect{it.'@name'}.join(', ') } println "Languages by Wirth: " + languageByAuthor('Wirth') } } class UsingXMLSlurperWithNS { public static void main(String[] args) { def languages = new XmlSlurper().parse("src/com/mstar/xml/languagesWithNS.xml").declareNamespace(human: 'Natural') print "Languages: " println languages.language.collect{it.'@name'}.join(', ') print "Natural languages: " println languages.'human:language'.collect{it.'@name'}.join(', ') def languages2 = new XmlSlurper().parse("src/com/mstar/xml/languagesWithNS.xml").declareNamespace(machine: 'Computer') print "Machine languages: " println languages2.'machine:language'.collect{it.'@name'}.join(', ') } }对于较大的文档,XmlParser的内存使用可能让人难以忍受
/** * groovy.util.XmlParser * 对于较大的文档,XmlParser的内存使用可能让人难以忍受 */ class UsingXmlParse { public static void main(String[] args) { def languages = new XmlParser().parse("src/com/mstar/xml/languages.xml") println "Languages and author.." languages.each{println "${it.'@name'} authored by ${it.author.text()}"} def languagesByAuthor = {author -> languages.findAll{it.author.text() == author}.collect{it.'@name'}.join(', ') } println "Languages by Wirth: " + languagesByAuthor('Wirth') } }