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> |
19 标签:xml或者html的更多相关文章
- Jersey(1.19.1) - XML Support
As you probably already know, Jersey uses MessageBodyWriters and MessageBodyReaders to parse incomin ...
- tomcat与springmvc 结合 之---第19篇(下,补充) springmvc 加载.xml文件的bean标签的过程
writedby 张艳涛,上一篇写了springmvc对<mvc:annoXXXX/>标签的解析过程,其实是遗漏重要的细节,因为理解的不深入吧 今天接着解析<bean>标签 & ...
- 读取只包含标签的xml
什么是XML XML是可扩展标记语言(Extensible Markup Language)的缩写,其中标记是关键部分.用户可以创建内容,然后使用限定标记标记它,从而使每个单词.短语或块成为可识别.可 ...
- tomcat与springmvc 结合 之---第19篇 springmvc 加载.xml文件的bean 过程
writedby 张艳涛,看springmvc 的源码太难了,怎么办, 这篇文章主要分析了看透springmvc的第9章结尾的 如何解析xml 命名空间标签 <?xml version=&quo ...
- 转:在java中使用dom4j解析xml
JAVA 使用Dom4j 解析XML Java DOM4J Parser - Parse XML Document Dom4j下载及使用Dom4j读写XML简介 在java中使用dom4j解析xml ...
- javaweb学习总结(二十七)——jsp简单标签开发案例和打包
一.开发标签库 1.1.开发防盗链标签 1.编写标签处理器类:RefererTag.java 1 package me.gacl.web.simpletag; 2 3 import java.io.I ...
- 9.XML文件解析
一.XML简介 XML(EXtensible Markup Language),可扩展标记语言 特点:XML与操作系统.编程语言的开发平台无关 实现不同系统之间的数据交换 作用:数据交互 配置应用程序 ...
- Java是如何解析xml文件的(DOM)
Java解析xml文件 在Java程序中读取xml文件的过程也称为"解析xml文件": 解析的目的: 获取 节点名和节点值 获取 属性名.属性值. 四中解析方式: DOM SAX ...
- 第70节:Java中xml和tomcat
第70节:Java中xml和tomcat 前言: 哭着也要看完,字数: jdbc crud - statement dao java.sql.Driver The interface that eve ...
随机推荐
- PYTHON 爬虫笔记四:正则表达式基础用法
知识点一:正则表达式详解及其基本使用方法 什么是正则表达式 正则表达式对子符串操作的一种逻辑公式,就是事先定义好的一些特定字符.及这些特定字符的组合,组成一个‘规则字符串’,这个‘规则字符串’用来表达 ...
- codeforces B. Ilya and Queries 解题报告
题目链接:http://codeforces.com/problemset/problem/313/B 题目意思:给出一个只有 "." 和 "#" 组成的序 ...
- 关于Spring Security的笔记
1.web.xml配置文件 加载Spring Security,将DelegatingFilterProxy配置在DispatcherServlet之前. <filter> <fil ...
- PIL 安装及使用
我ubunto虚拟机自带的是python2.7,好像PIL也只支持到2.7. PIL包的安装 Debian/Ubunto Linux下直接安装: sudo apt-get install python ...
- JavaWeb----文件的上传和下载
一.开发环境搭建 创建一个FileUploadAndDownLoad项目,加入Apache的commons-fileupload文件上传组件的相关Jar包,如下图所示: 二.实现文件上传 2.1.文件 ...
- vue.js created函数注意事项
因为created钩子函数是页面一加载完就会调用的函数,所以如果你想在这个组件拿值或者是赋值,很可能this里面能拿到数据,但是如果你用this.赋值的话,控制台或者debugger都会发现this里 ...
- caffe参数详解
转载自:https://blog.csdn.net/qq_14845119/article/details/54929389 solver.prototxt net:训练预测的网络描述文件,trai ...
- 【网络爬虫】【java】微博爬虫(二):如何抓取HTML页面及HttpClient使用
一.写在前面 上篇文章以网易微博爬虫为例,给出了一个很简单的微博爬虫的爬取过程,大概说明了网络爬虫其实也就这么回事,或许初次看到这个例子觉得有些复杂,不过没有关系,上篇文章给的例子只是让大家对爬虫过程 ...
- Flutter实战视频-移动电商-63.购物车_详细页显示购物车商品数量
63.购物车_详细页显示购物车商品数量 购物车的图标嵌套在statck组件里面 外层套了一个stack组件 数量我们需要用Provide 返回一个container来做样式 气泡效果,中间是个数字外面 ...
- sqlserver——视图
数据库中的视图是一个虚拟表.同真实的表一样,视图包含一系列带有名称的列和行数据,行和列数据用来自由定义视图和查询所引用的表,并且在引用视图时动态产生.本篇将通过一些实例来介绍视图的概念,视图的作用,创 ...