使用T4模板读取XML文件
2010-06-02 16:34
399 查看
有的时候,我们需要定义一些Enum类型,一种比较灵活的做法是用T4模板去读取指定的XML,然后根据NODE生成我们想到的Enum类型。首先看,我们有这样一个XML文件:
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
然后我们编写扩展名为TT的模板文件在VisualStudio中:
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
最后执行这个模板文件,将会在当前目录下,生成如下的CODE文件:
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
是不是很简单,当然你可以编写更加复杂的模板文件,生成你想到CODE。
如果你不了解T4模板,你可以参考MSDN,如你已经了解,那么你有可能对以下文章感兴趣:
T4(TextTemplateTransformationToolkit)实现简单实体代码生成
LinqtoEntity的T4模板生成代码
作者:PetterLiu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-PetterLiuBlog。
<?xmlversion="1.0"encoding="utf-8"?>
<Root>
<ElementName="Red"/>
<ElementName="Blue"/>
</Root>
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
然后我们编写扩展名为TT的模板文件在VisualStudio中:
<#@templatelanguage="C#"hostspecific="True"#>
<#@assemblyname="System.Core"#>
<#@assemblyname="System.Xml"#>
<#@importnamespace="System.Xml"#>
<#@importnamespace="System.Collections.Generic"#>
<#@importnamespace="System.IO"#>
usingSystem;
namespaceExamples
{
publicclassExampleClass
{
#regionEnums
publicenumMyExampleEnum
{
<#
foreach(stringnameinthis.GetNames())
{
#>
<#=name#>,
<#
}
#>
}
#endregion
}
}
<#+
publicList<string>GetNames()
{
List<string>result=newList<string>();
XmlDocumentdoc=newXmlDocument();
stringabsolutePath=Host.ResolvePath("MyEnum.xml");
doc.Load(absolutePath);
foreach(XmlNodenodeindoc.SelectNodes("/Root/Element"))
{
result.Add(node.Attributes["Name"].InnerText);
}
returnresult;
}
#>
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
最后执行这个模板文件,将会在当前目录下,生成如下的CODE文件:
usingSystem;
namespaceExamples
{
publicclassExampleClass
{
#regionEnums
publicenumMyExampleEnum
{
Red,
Blue,
}
#endregion
}
}
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
是不是很简单,当然你可以编写更加复杂的模板文件,生成你想到CODE。
如果你不了解T4模板,你可以参考
作者:
出处:
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-
相关文章推荐
- 关于如何使用vc6.0读取xml文件中的内容
- 使用命令行将多个xml文件压缩成zip,使用as3读取zip中的xml文件
- 使用JDOM来读取XML文件
- [转]使用JQuery读取XML文件数据
- 读取xml学习:使用jdom读取xml文件
- 使用javascript中读取Xml文件做成的一个二级联动菜单
- 使用rapidxml从xml文件中读取指定项(建议两层)
- 使用SAX或者DOM或者pull读取XML文件
- 使用JQuery读取XML文件数据(转)
- 使用dom4j 读取XML文件
- [libexpat]_[XML处理]_[C/C++使用libexpat库以数据流(SAX模型)的方式读取(解析)大XML文件]
- 读取存储在MsSql下的文件,配合使用DataGrid的模板列。
- 通过t4模板结合XML定义文件生成MVVM中的Model Entity Class 代码
- 使用XmlReader读取xml文件
- Android --- 使用SAX读取xml文件
- 使用 JavaScript读取 xml 文件 --生成 对应的二维数组 问题
- 使用SAX读取XML文件
- 使用javascript中读取Xml文件做成的一个二级联动菜单
- 使用T4模板合并js文件
- 使用jxl读取模板文件,写入数据并导出excel