.Net平台下基于Xslt的代码生成组件的实现

xiaoxiao2021-02-28  106

1.准备知识:

    (1)Xslt是什么? 

                在计算机科学中,XSLT是 扩展样式表转换语言 的外语缩写,这是一种对XML(标准通用标记语言的子集)文档进行转化的语言,XSLT中的T代表英语中的“转 换”(Transformation)。它是XSLeXtensible 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

本人菜鸟,第一次发帖,写的不好还请海涵,欢迎前来交流和多提建议
转载请注明原文地址: https://www.6miu.com/read-42601.html

最新回复(0)