.Net平台下基于Xslt的代码生成组件的实现
来源:互联网 发布:c语言!=eof怎么用 编辑:程序博客网 时间:2024/05/16 17:40
1.准备知识:
(1)Xslt是什么?
在计算机科学中,XSLT是 扩展样式表转换语言 的外语缩写,这是一种对XML(标准通用标记语言的子集)文档进行转化的语言,XSLT中的T代表英语中的“转换”(Transformation)。它是XSL(eXtensible Stylesheet Language)规范的一部分。
详见:http://baike.baidu.com/link?url=Sbf9eyxXTcHFzRRJUoGWxvYHD6MbqYxAlLQngHwF6tFMvxruacaqMpDQjmx6xgWfDyQhdN9p0bdSvMp9K1oyyq
(2)Xslt怎么写?
在W3School中有详尽的Xslt教程,http://www.w3school.com.cn/xsl/
2.具体实现
直接代码
首先实现Xml格式的数据源结点生成逻辑的接口ICodeGeneratorMember
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Yuri.Toolkit.CodeGenerator.Test{ public class SampleGeneratorMember : ICodeGeneratorMember { public string Build(Dictionary<string, string> memberProperties) { return "<Property1>" + memberProperties["Property1"] + "</Property1><Property2>" + memberProperties["Property2"] + "</Property2>"; } }}
然后定义Xml格式的数据源模板
<?xml version="1.0" encoding="utf-8" ?><CodeGenerator> <!--CodeGeneratorMembers Ref属性为该Member的实现类路径,格式:Yuri.Toolkit.CodeGenerator.Test.SampleGeneratorMember,Yuri.Toolkit.CodeGenerator.Test 每个Properties的Property的Name属性必须唯一 --> <Members> <Member Name="SampleMember1" Ref="Yuri.Toolkit.CodeGenerator.Test.SampleGeneratorMember,Yuri.Toolkit.CodeGenerator.Test" > <Properties> <Property Name="Property1">${P1}</Property> <Property Name="Property2">${P2}</Property> </Properties> </Member> </Members> <!--全局Properties,Property的Name属性必须唯一,调用格式:${PropertyName}--> <Properties> <Property Name="P1">111</Property> <Property Name="P2"></Property> </Properties></CodeGenerator>
再编写Xslt文件
<?xml version="1.0" encoding="utf-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> SampleMember1的第一个属性值为:<xsl:value-of select="CodeGenerator/SampleMember1/Property1"/> SampleMember1的第二个属性值为:<xsl:value-of select="CodeGenerator/SampleMember1/Property2"/> </xsl:template></xsl:stylesheet>
调用方式
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Yuri.Toolkit.CodeGenerator.Test{ class Program { static void Main(string[] args) { string s1 = TestCodeGeneratorTemplate(); } private static string TestCodeGeneratorTemplate() { ICodeGenerator codeGenerator = CodeGeneratorFactory.GetCodeGenerator(); Dictionary<string, string> props = new Dictionary<string, string>(); props.Add("P2", "789"); string xmlData = codeGenerator.TransformGeneratorTemplate("Sample", props); string code = codeGenerator.GenerateCode("Sample", "Sample", props); return code; } }}
转换后的Xml数据源
<?xml version="1.0" encoding="utf-8"?><CodeGenerator> <SampleMember1> <Property1>111</Property1> <Property2>789</Property2> </SampleMember1> <Properties> <P1>111</P1> <P2>789</P2> </Properties></CodeGenerator>
转换后结果:
SampleMember1的第一个属性值为:111
SampleMember1的第二个属性值为:789
最后附上项目代码:链接:http://pan.baidu.com/s/1slk9q7F 密码:uxl4
本人菜鸟,第一次发帖,写的不好还请海涵,欢迎前来交流和多提建议
阅读全文
0 0
- .Net平台下基于Xslt的代码生成组件的实现
- 基于 Eclipse 平台的代码生成技术
- 使用xslt动态生成javabean的代码
- G4Studio平台下基于ExtJS的下拉复选组件实现案例
- C#.net下的代码生成工具
- 基于.net技术的代码高亮显示组件
- 基于.net技术的代码高亮显示组件
- 基于.net技术的代码高亮显示组件
- 基于.net技术的代码高亮显示组件
- 基于.net技术的代码高亮显示组件
- 基于.net技术的代码高亮显示组件
- [代码生成] 使用Java与XSLT的10条技巧
- .Net 平台下实现的语言
- .NET平台下websocket协议的实现!
- .NET平台下websocket协议的实现!
- .NET下基于组件的分布式系统动态配置
- .Net平台下基于角色的访问控制系统(转)
- C#(.Net)平台下生成随机数方法的小结
- 从零开始写javaweb框架笔记1-使用IDEA创建Maven项目
- Linux 安装nginx、配置文件及负载均衡
- java调用接口
- 计算广告学习笔记1.2 广告的基础知识-广告的有效性模型
- Unity 保存Json数据到本地文件(字典)
- .Net平台下基于Xslt的代码生成组件的实现
- 新概念4-15
- 2017区赛
- 【油猴Tampermonkey】脚本安装教程+自用脚本推荐
- Python——UnicodeEncodeError: 'ascii' codec can't encode/decode characters
- HDU 1358 Period(最小循环节)
- Spring Boot 接入大众点评 CAT系统监控
- CSIG图像图形学科前沿讲习班-学习心得“深度学习+视觉大数据”
- 数据不够大,别玩深度学习?