当前位置:网站首页>[groovy] XML serialization (use markupbuilder to generate XML data | create sub tags under tag closures | use markupbuilderhelper to add XML comments)
[groovy] XML serialization (use markupbuilder to generate XML data | create sub tags under tag closures | use markupbuilderhelper to add XML comments)
2022-07-06 00:34:00 【Programmer community】
List of articles
- One 、 Create sub tags under tag closures
- Two 、 Use MarkupBuilderHelper add to xml notes
- 3、 ... and 、 Complete code example
One 、 Create sub tags under tag closures
In the last blog 【Groovy】xml serialize ( Use MarkupBuilder Generate xml data ) Generated xml On the basis of documents , If you want it under the label , Create sub tags , As follows <team> Create under the label <member> label ;
<student> <name code="utf-8">Tom</name> <age>18</age> <team> <member>Jerry</member> </team></student>In the closure that creates the tag , Nest and create labels again ;
markupBuilder.student{
// Create a sub tag under the tag team() {
member("Jerry") {
} }}The complete code is as follows :
// Generate the above xml file markupBuilder.student{
// The format is as follows : // xml Tag name ( Label content , Tag attributes : Tag attribute value ) // Generate label content : Just write the label directly // Generate tag attributes : Tag attributes are generated using key value pairs name("Tom", code: "utf-8") {
} age(18) {
} // Create a sub tag under the tag team() {
member("Jerry") {
} }}Two 、 Use MarkupBuilderHelper add to xml notes
In a closure, you can use mkp obtain MarkupBuilderHelper object , This object can help add xml notes ;
/** * attribute , This property can be called from the generator closure to access helper methods , * namely {@link MarkupBuilderHelper#yield(String)}, * {@link MarkupBuilderHelper#yieldUnescaped(String)}, * {@link MarkupBuilderHelper#pi(Map)}, * {@link MarkupBuilderHelper#xmlDeclaration(Map)} and * {@link MarkupBuilderHelper#comment(String)}. * * @return this MarkupBuilder */ public MarkupBuilderHelper getMkp() {
return new MarkupBuilderHelper(this); }MarkupBuilderHelper Class provides some methods , among comment Method , Can be used to add comments ;
public class MarkupBuilderHelper {
private final MarkupBuilder builder; /** * Generate comments in the output . * <p> * <code>mkp.comment 'string'</code> is equivalent to * <code>mkp.yieldUnescaped '<!-- string -->'</code>. * To create an element with the name 'comment', you need * to supply empty attributes, e.g.: * <pre> * comment('hello1') * </pre> * or * <pre> * mkp.comment('hello1') * </pre> * will produce: * <pre> * <!-- hello1 --> * </pre> * while: * <pre> * comment('hello2', [:]) * </pre> * will produce: * <pre> * <comment>hello2</comment> * </pre> * * @param value the text within the comment. */ public void comment(String value) {
yieldUnescaped("<!-- " + value + " -->"); }} Use in closures mkp.comment(" The student's name ") Code , Can generate <!-- The student's name --> notes ;
markupBuilder.student{
mkp.comment(" The student's name ")}3、 ... and 、 Complete code example
Complete code example :
import groovy.xml.MarkupBuilder"""<student> <name code="utf-8">Tom</name> <age>18</age> <team> <member>Jerry</member> </team></student>"""def fileWriter = new FileWriter(new File("a.xml"))// establish MarkupBuilder object // Constructor passed in FileWriter It means that you will xml Write the file into the file def markupBuilder = new MarkupBuilder(fileWriter)// Generate the above xml file markupBuilder.student{
// The format is as follows : // xml Tag name ( Label content , Tag attributes : Tag attribute value ) // Generate label content : Just write the label directly // Generate tag attributes : Tag attributes are generated using key value pairs name("Tom", code: "utf-8") {
} mkp.comment(" The student's name ") age(18) {
} mkp.comment(" Student age ") // Create a sub tag under the tag team() {
member("Jerry") {
} } mkp.comment(" Team members ")}Execution results :
<student> <name code='utf-8'>Tom</name><!-- The student's name --> <age>18</age><!-- Student age --> <team> <member>Jerry</member> </team><!-- Team members --></student>
边栏推荐
- 【文件IO的简单实现】
- Notepad + + regular expression replace String
- LeetCode 6006. Take out the least number of magic beans
- Global and Chinese markets for pressure and temperature sensors 2022-2028: Research Report on technology, participants, trends, market size and share
- An understanding of & array names
- Intranet Security Learning (V) -- domain horizontal: SPN & RDP & Cobalt strike
- 常用API类及异常体系
- 多线程与高并发(8)—— 从CountDownLatch总结AQS共享锁(三周年打卡)
- Recognize the small experiment of extracting and displaying Mel spectrum (observe the difference between different y_axis and x_axis)
- notepad++正則錶達式替換字符串
猜你喜欢

XML配置文件

Room cannot create an SQLite connection to verify the queries

Opencv classic 100 questions

Tools to improve work efficiency: the idea of SQL batch generation tools
![[designmode] Decorator Pattern](/img/65/457e0287383d0ca9a28703a63b4e1a.png)
[designmode] Decorator Pattern

Notepad + + regular expression replace String

Gd32f4xx UIP protocol stack migration record

Model analysis of establishment time and holding time

Key structure of ffmpeg -- AVCodecContext

Spark AQE
随机推荐
Go learning --- read INI file
How to use the flutter framework to develop and run small programs
AtCoder Beginner Contest 254【VP记录】
《强化学习周刊》第52期:Depth-CUPRL、DistSPECTRL & Double Deep Q-Network
Power Query数据格式的转换、拆分合并提取、删除重复项、删除错误、转置与反转、透视和逆透视
Pointer pointer array, array pointer
LeetCode 6004. Get operands of 0
Spark SQL null value, Nan judgment and processing
MySql——CRUD
[designmode] Decorator Pattern
LeetCode 1189. Maximum number of "balloons"
AtCoder Beginner Contest 258【比赛记录】
Codeforces round 804 (Div. 2) [competition record]
Leetcode 450 deleting nodes in a binary search tree
Gavin teacher's perception of transformer live class - rasa project actual combat e-commerce retail customer service intelligent business dialogue robot system behavior analysis and project summary (4
图解网络:TCP三次握手背后的原理,为啥两次握手不可以?
LeetCode 斐波那契序列
MySQL functions
数据分析思维分析方法和业务知识——分析方法(二)
Extension and application of timestamp