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>

  • 相关阅读:
    动态传参
    函数的介绍
    文件的操作
    send email with formatted table
    minimize and close window with customed winform
    python algorithm
    something important about docker
    book list
    which language is suitable for what to do
    Find Duplicate Items in list fast
  • 原文地址:https://www.cnblogs.com/yaoyuan2/p/5719207.html
Copyright © 2011-2022 走看看