19 标签:xml或者html

1       标签:xml或者html

1.1  使用XmlSlurper解析xml

groovy处理xml非常容易。XmlSlurper 类用来处理xml。在处理xml方面,还有其他的处理方式,但是XmlSlurper 处理效率更加的高效,并且灵活性很好。

XmlSlurper 执行parseText后返回GPathResult 对象。能够使用GPath 表达式来访问xml树中的各个层级节点。

用点(.)来读取需要的子节点,并且使用@读取属性值。

package xml

 

class XmlSlurperTest {

 

    static main(args) {

       def xmldocument='''

           <persons>

              <person age="3">

                  <name>

                     <firstname sex="男">zuoys</firstname>

                     <lastname>yaoyuan2</lastname>

                  </name>

              </person>

              <person age="4">

                  <name>

                     <firstname>yang</firstname>

                     <lastname>jack</lastname>

                  </name>

              </person>

           </persons>

       ''';

       //解析并读取该xml

       def persons = new XmlSlurper().parseText(xmldocument);

       /**

        * 当然,也可以从一个磁盘中的文件中读取,如

        * def persons = new XmlSlurper().parse(new File('data/plan.xml'))

        */

       def allRecords = persons.person.size();

       println("xml文档中person的数量是:$allRecords");

       def person = persons.person[0];

       println("person'name下的所有元素(不含属性)的值:${person.name}");

       for (p in persons.person) {

           println("${p.name.firstname.text()},${p.name.lastname.text()} 是 ${p.@age} 岁");

       }

    }

 

}

输出

xml文档中person的数量是:2

person'name下的所有值:zuoysyaoyuan2

zuoys,yaoyuan2 是 3 岁

yang,jack 是 4 岁

1.2  使用MarkupTemplateEngine生成标签

在Groovy2.3中,MarkupTemplateEngine 支持生成类似xml的标记(XML, XHTML, HTML5等),但是,其通常被用来生成任意的文本。

静态编译非常快,并且支持国际化,同时也支持模板(template)。

package xml

 

import groovy.text.markup.MarkupTemplateEngine

import groovy.text.markup.TemplateConfiguration

import template.Task

 

class MarkupTemplateEngineTest {

 

    static main(args) {

       String xml_template = '''xmlDeclaration()

           tasks {

              tasks.each {

                  task (summary:it.summary,duration:it.duration);

              };

           };

       ''';

       String html_template='''

           yieldUnescaped '<!DOCTYPE html>';

           html(lang:'en') {

              head {

                  meta('http-equiv':'"Content-Type" content="text/html; charset=utf-8"');

                  title('My page');

              };

              body {

                  p('这是一个html例子');

              };

           };

       ''';

       def values = [tasks:[

           new Task(summary:"java",duration:4),

           new Task(summary:"groovy",duration:12)

           ]

       ];

       TemplateConfiguration config = new TemplateConfiguration();

       def engine = new MarkupTemplateEngine(config);

       def template1 = engine.createTemplate(xml_template);

       def template2 = engine.createTemplate(html_template);

       println("===xml输出:");

       println template1.make(values);

       println("===html输出:");

       println template2.make(values);

    }

 

}

输出

===xml输出:

<?xml version='1.0'?>

<tasks><task summary='java' duration='4'/><task summary='groovy' duration='12'/></tasks>

===html输出:

<!DOCTYPE html><html lang='en'><head><meta http-equiv='"Content-Type" content="text/html; charset=utf-8"'/><title>My page</title></head><body><p>这是一个html例子</p></body></html>

Templates support includes.

1.3  使用MarkupBuilder创建标签(xml)文件

MarkupBuilder 是一个很老的builder,例子如下:

package xml

 

import groovy.xml.MarkupBuilder

/**

 * 生产xml

 * @author zuoys

 *

 */

class MarkupWriter {

 

    static main(args) {

       def date = new Date();

       StringWriter writer = new StringWriter();

       MarkupBuilder builder = new MarkupBuilder(writer);

       builder.tasks {

           for (i in 1..3) {

              task {

                  summary(value:"Test $i");

                  description(value:"Description $i");

                  duedate(value:"${date.format('yyyy-MM-dd')}");

              };

           }

       };

       println(writer.toString());

    }

 

}

输出

<tasks>

  <task>

    <summary value='Test 1' />

    <description value='Description 1' />

    <duedate value='2016-07-24' />

  </task>

  <task>

    <summary value='Test 2' />

    <description value='Description 2' />

    <duedate value='2016-07-24' />

  </task>

  <task>

    <summary value='Test 3' />

    <description value='Description 3' />

    <duedate value='2016-07-24' />

  </task>

</tasks>

builder.tasks {:生成父节点。

task {生成二级子节点。

summary(value:"Test $i");:使用构造方法来创建子节点。

使用MarkupBuilder时,这些都是在运行时构建的。

也可以使用map,如下:

package xml

 

import groovy.xml.MarkupBuilder

 

class MarkupWriterMap {

 

    static main(args) {

       Map map = [zuo:"zuoys",yang:"yangyang"];

       def date = new Date();

       StringWriter writer = new StringWriter();

       MarkupBuilder builder = new MarkupBuilder(writer);

       builder.tasks {

           map.each {key,myvalue ->

              person {

                  firstname(value:"$key");

                  lastname(value:"$myvalue");

              };

           };

       };

       println(writer.toString());

    }

 

}

输出

<tasks>

  <person>

    <firstname value='zuo' />

    <lastname value='zuoys' />

  </person>

  <person>

    <firstname value='yang' />

    <lastname value='yangyang' />

  </person>

</tasks>

也可以使用builder来创建合法的html。

package xml

 

import groovy.xml.MarkupBuilder

 

class MarkupHtml {

 

    static main(args) {

       Map map = [zuo:"zuoys",yang:"yangyang"];

       def date = new Date();

       StringWriter writer = new StringWriter();

       MarkupBuilder builder = new MarkupBuilder(writer);

       builder.html {

           head {

              title("yaoyuan2.com");

           };

           body {

              div (class:"strike");

              p ("this is line");

           };

       };

       println(writer.toString());

    }

 

}

输出

<html>

  <head>

    <title>yaoyuan2.com</title>

  </head>

  <body>

    <div class='strike' />

    <p>this is line</p>

  </body>

</html>

原文地址:https://www.cnblogs.com/yaoyuan2/p/5719207.html