课程表

Groovy课程

工具箱
速查手册

Groovy XML

当前位置:免费教程 » Java相关 » Groovy

XML是一种便携的开放源代码语言,允许程序员开发可以被其他应用程序读取的应用程序,而不管操作系统或开发语言。这是用于在应用程序之间交换数据的最常用的语言之一。

XML是什么?

可扩展标记语言XML是一种非常类似于HTML或SGML的标记语言。这是万维网联盟推荐的,可作为开放标准。XML对于跟踪少量到中等数据量而不需要基于SQL架构的时候非常有用。你可以进入我们的XML教程学习XML。

Groovy中的XML支持

Groovy语言还提供了对XML语言的丰富支持。使用的两个最基本的XML类是 -

  • XML标记构建器 - Groovy支持基于树的标记生成器BuilderSupport,它可以被子类化以生成各种树结构对象表示。通常,这些构建器用于表示XML标记,HTML标记。 Groovy的标记生成器捕获对伪方法的调用,并将它们转换为树结构的元素或节点。这些伪方法的参数被视为节点的属性。作为方法调用一部分的闭包被视为生成的树节点的嵌套子内容。

  • XML解析器 - Groovy XmlParser类使用一个简单的模型来将XML文档解析为Node实例的树。每个节点都有XML元素的名称,元素的属性和对任何子节点的引用。这个模型足够用于大多数简单的XML处理。

对于所有的XML代码示例,让我们使用以下简单的XML文件movies.xml来构建XML文件并随后读取该文件。

  1. <collection shelf = "New Arrivals">
  2.  
  3. <movie title = "Enemy Behind">
  4. <type>War, Thriller</type>
  5. <format>DVD</format>
  6. <year>2003</year>
  7. <rating>PG</rating>
  8. <stars>10</stars>
  9. <description>Talk about a US-Japan war</description>
  10. </movie>
  11. <movie title = "Transformers">
  12. <type>Anime, Science Fiction</type>
  13. <format>DVD</format>
  14. <year>1989</year>
  15. <rating>R</rating>
  16. <stars>8</stars>
  17. <description>A schientific fiction</description>
  18. </movie>
  19. <movie title = "Trigun">
  20. <type>Anime, Action</type>
  21. <format>DVD</format>
  22. <year>1986</year>
  23. <rating>PG</rating>
  24. <stars>10</stars>
  25. <description>Vash the Stam pede!</description>
  26. </movie>
  27. <movie title = "Ishtar">
  28. <type>Comedy</type>
  29. <format>VHS</format>
  30. <year>1987</year>
  31. <rating>PG</rating>
  32. <stars>2</stars>
  33. <description>Viewable boredom </description>
  34. </movie>
  35. </collection>

XML标记生成器

句法

  1. public MarkupBuilder()

MarkupBuilder用于构造整个XML文档。通过首先创建XML文档类的对象来创建XML文档。一旦创建了对象,可以调用伪方法来创建XML文档的各种元素。

让我们来看一个如何创建一个块的示例,即从上述XML文档中创建一个电影元素 -

  1. import groovy.xml.MarkupBuilder
  2.  
  3. class Example {
  4. static void main(String[] args) {
  5. def mB = new MarkupBuilder()
  6. // Compose the builder
  7. mB.collection(shelf : 'New Arrivals') {
  8. movie(title : 'Enemy Behind')
  9. type('War, Thriller')
  10. format('DVD')
  11. year('2003')
  12. rating('PG')
  13. stars(10)
  14. description('Talk about a US-Japan war')
  15. }
  16. }
  17. }

在线运行实例

在上面的例子中,需要注意以下几点:

  • mB.collection() -这是一个标记生成器,用于创建<collection> </ collection>的头XML标签

  • movie(title : 'Enemy Behind') -这些伪方法使用此方法创建带有值的标记的子标记。通过指定一个名为title的值,这实际上表示需要为该元素创建一个属性。

  • 向伪方法提供闭包以创建XML文档的剩余元素。

  • 初始化类MarkupBuilder的默认构造函数,以便将生成的XML发布到标准输出流

当我们运行上面的程序,我们将得到以下结果 -

  1. <collection shelf = 'New Arrivals'>
  2. <movie title = 'Enemy Behind' />
  3. <type>War, Thriller</type>
  4. <format>DVD</format>
  5. <year>2003</year>
  6. <rating>PG</rating>
  7. <stars>10</stars>
  8. <description>Talk about a US-Japan war</description>
  9. </movie>
  10. </collection>

为了创建整个XML文档,需要执行以下操作。

  • 需要创建映射条目以存储元素的不同值。
  • 对于地图的每个元素,我们将值分配给每个元素。
  1. import groovy.xml.MarkupBuilder
  2.  
  3. class Example {
  4. static void main(String[] args) {
  5. def mp = [1 : ['Enemy Behind', 'War, Thriller','DVD','2003',
  6. 'PG', '10','Talk about a US-Japan war'],
  7. 2 : ['Transformers','Anime, Science Fiction','DVD','1989',
  8. 'R', '8','A scientific fiction'],
  9. 3 : ['Trigun','Anime, Action','DVD','1986',
  10. 'PG', '10','Vash the Stam pede'],
  11. 4 : ['Ishtar','Comedy','VHS','1987', 'PG',
  12. '2','Viewable boredom ']]
  13. def mB = new MarkupBuilder()
  14. // Compose the builder
  15. def MOVIEDB = mB.collection('shelf': 'New Arrivals') {
  16. mp.each {
  17. sd ->
  18. mB.movie('title': sd.value[0]) {
  19. type(sd.value[1])
  20. format(sd.value[2])
  21. year(sd.value[3])
  22. rating(sd.value[4])
  23. stars(sd.value[4])
  24. description(sd.value[5])
  25. }
  26. }
  27. }
  28. }
  29. }

在线运行实例

当我们运行上面的程序,我们将得到以下结果 -

  1. <collection shelf = 'New Arrivals'>
  2. <movie title = 'Enemy Behind'>
  3. <type>War, Thriller</type>
  4. <format>DVD</format>
  5. <year>2003</year>
  6. <rating>PG</rating>
  7. <stars>PG</stars>
  8. <description>10</description>
  9. </movie>
  10. <movie title = 'Transformers'>
  11. <type>Anime, Science Fiction</type>
  12. <format>DVD</format>
  13. <year>1989</year>
  14. <rating>R</rating>
  15. <stars>R</stars>
  16. <description>8</description>
  17. </movie>
  18. <movie title = 'Trigun'>
  19. <type>Anime, Action</type>
  20. <format>DVD</format>
  21. <year>1986</year>
  22. <rating>PG</rating>
  23. <stars>PG</stars>
  24. <description>10</description>
  25. </movie>
  26. <movie title = 'Ishtar'>
  27. <type>Comedy</type>
  28. <format>VHS</format>
  29. <year>1987</year>
  30. <rating>PG</rating>
  31. <stars>PG</stars>
  32. <description>2</description>
  33. </movie>
  34. </collection>

XML解析

Groovy XmlParser类使用一个简单的模型来将XML文档解析为Node实例的树。每个节点都有XML元素的名称,元素的属性和对任何子节点的引用。这个模型足够用于大多数简单的XML处理。

句法

  1. public XmlParser()
  2. throws ParserConfigurationException,
  3. SAXException

以下代码显示了如何使用XML解析器读取XML文档的示例。

让我们假设我们有同样的文档,名为Movies.xml,我们想解析XML文档并向用户显示一个正确的输出。以下代码是我们如何遍历XML文档的整个内容并向用户显示正确响应的代码段。

  1. import groovy.xml.MarkupBuilder
  2. import groovy.util.*
  3.  
  4. class Example {
  5.  
  6. static void main(String[] args) {
  7. def parser = new XmlParser()
  8. def doc = parser.parse("D:Movies.xml");
  9. doc.movie.each{
  10. bk->
  11. print("Movie Name:")
  12. println "${bk['@title']}"
  13. print("Movie Type:")
  14. println "${bk.type[0].text()}"
  15. print("Movie Format:")
  16. println "${bk.format[0].text()}"
  17. print("Movie year:")
  18. println "${bk.year[0].text()}"
  19. print("Movie rating:")
  20. println "${bk.rating[0].text()}"
  21. print("Movie stars:")
  22. println "${bk.stars[0].text()}"
  23. print("Movie description:")
  24. println "${bk.description[0].text()}"
  25. println("*******************************")
  26. }
  27. }
  28. }

当我们运行上面的程序,我们将得到以下结果 -

  1. Movie Name:Enemy Behind
  2. Movie Type:War, Thriller
  3. Movie Format:DVD
  4. Movie year:2003
  5. Movie rating:PG
  6. Movie stars:10
  7. Movie description:Talk about a US-Japan war
  8. *******************************
  9. Movie Name:Transformers
  10. Movie Type:Anime, Science Fiction
  11. Movie Format:DVD
  12. Movie year:1989
  13. Movie rating:R
  14. Movie stars:8
  15. Movie description:A schientific fiction
  16. *******************************
  17. Movie Name:Trigun
  18. Movie Type:Anime, Action
  19. Movie Format:DVD
  20. Movie year:1986
  21. Movie rating:PG
  22. Movie stars:10
  23. Movie description:Vash the Stam pede!
  24. *******************************
  25. Movie Name:Ishtar
  26. Movie Type:Comedy
  27. Movie Format:VHS
  28. Movie year:1987
  29. Movie rating:PG
  30. Movie stars:2
  31. Movie description:Viewable boredom

重要的事情需要注意上面的代码。

  • 正在形成类XmlParser的对象,以便它可以用于解析XML文档。

  • 解析器被给定XML文件的位置。

  • 对于每个电影元素,我们使用闭包浏览每个子节点并显示相关信息。

对于movie元素本身,我们使用@符号显示附加到movie元素的title属性。

转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号