zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    Istio流量管理实践之(3): 基于Istio实现流量对比分析
    15分钟在笔记本上搭建 Kubernetes + Istio开发环境
    阿里云 Aliplayer高级功能介绍(九):自动播放体验
    阿里云 Aliplayer高级功能介绍(八):安全播放
    阿里云 Aliplayer高级功能介绍(七):多分辨率
    统计报告称中国大学导师最多同时带47名博士生
    RHEL5 挂载 NTFS 分区
    2008级计算机应用 嵌入式方向课表(前10周)
    硬盘安装CentOS-5.5
    slax
  • 原文地址:https://www.cnblogs.com/yaoyuan2/p/5719207.html
Copyright © 2011-2022 走看看