使用T4模板读取XML文件

          有的时候,我们需要定义一些Enum类型,一种比较灵活的做法是用T4模板去读取指定的XML,然后根据NODE生成我们想到的Enum类型。首先看,我们有这样一个XML文件:

   1:  <?xml version="1.0" encoding="utf-8" ?>
   2:  <Root>
   3:    <Element Name="Red"/>
   4:    <Element Name="Blue" />
   5:  </Root>

         然后我们编写扩展名为TT的模板文件在VisualStudio中:

   1:  <#@ template language="C#"  hostspecific="True"#>
   2:  <#@ assembly name="System.Core" #>
   3:  <#@ assembly name="System.Xml" #>
   4:  <#@ import namespace="System.Xml" #>
   5:  <#@ import namespace="System.Collections.Generic" #>
   6:  <#@ import namespace="System.IO" #>
   7:  using System;
   8:   
   9:  namespace Examples
  10:  {
  11:      public class ExampleClass
  12:      {
  13:          #region Enums
  14:   
  15:          public enum MyExampleEnum
  16:          {
  17:  <#
  18:      foreach (string name in this.GetNames())   
  19:      {
  20:  #>
  21:              <#= name #>,
  22:  <# 
  23:      }
  24:          #>
  25:          }
  26:          
  27:          #endregion
  28:      }
  29:  }
  30:  <#+
  31:      public List<string> GetNames()
  32:      {
  33:          List<string> result = new List<string>(); 
  34:          XmlDocument doc = new XmlDocument();
  35:          string absolutePath = Host.ResolvePath("MyEnum.xml");                
  36:          doc.Load(absolutePath);
  37:          foreach (XmlNode node in doc.SelectNodes("/Root/Element"))
  38:          {
  39:              result.Add(node.Attributes["Name"].InnerText);
  40:          }
  41:          return result;
  42:      }
  43:  #>

最后执行这个模板文件,将会在当前目录下,生成如下的CODE文件:

   1:  using System;
   2:   
   3:  namespace Examples
   4:  {
   5:      public class ExampleClass
   6:      {
   7:          #region Enums
   8:   
   9:          public enum MyExampleEnum
  10:          {
  11:              Red,
  12:              Blue,
  13:          }
  14:          
  15:          #endregion
  16:      }
  17:  }

是不是很简单,当然你可以编写更加复杂的模板文件,生成你想到CODE。

如果你不了解T4模板,你可以参考MSDN, 如你已经了解,那么你有可能对以下文章感兴趣:

T4 (Text Template Transformation Toolkit)实现简单实体代码生成

Linq to Entity 的T4 模板生成代码


作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-Petter Liu Blog

原文地址:https://www.cnblogs.com/wintersun/p/1750099.html