CodeSmith实用技巧(六):使用XML 属性

摘要:
CodeSmith允许我们将元数据存储在XML文件中,然后在执行模板时直接打开XML文件以填充属性面板。˃267891017<xs:complexType>18<xs:attributename=“ItemNumber”type=“xs:string”use=“required”/˃19<xs:aattributename:“Quantity”type=”xs:integer“use=“required”/˃20</xs:complexType>21</xs:element˃22</xs:sequence>23</xs:complexType>24</xs:element>25</xs:-sequence>26</xs:compactType>27</xs::element>28</xs:schema>2930这是XMLProperty与schema的一个简单示例:使用这是一个很好的例子这个Schema文件,我们可以定义一个XMLProperty来在运行时读取元数据。PackingListref:PO#发货地址:,内容:,数量.Quantity%˃在运行时,PurchaseOrder属性在属性面板中显示为按钮。单击后,将弹出一个对话框,供用户选择XML文件。选择XML文件。˃2452715约翰尼尔森6Gamoneta7MS89101112131415生成的代码如下:PackingListref:PO#5271ShipTo:JohnNelson Gamoneta,MSContents:HM85,Quantity12JR82,Quantity4PR43,Quantity62.XMLPropertyWithoutaSchema这是一个没有Schema的XMLProperty示例。
 CodeSmith允许我们存储元数据在XML文件中,然后在执行模版时直接打开XML文件填写到属性面板中。

1XML Property With a Schema

 1CodeSmith实用技巧(六):使用XML 属性第1张<?xml version="1.0" encoding="UTF-8"?>
 2CodeSmith实用技巧(六):使用XML 属性第1张<xs:schema targetNamespace=http://www.codesmithtools.com/PO
 3CodeSmith实用技巧(六):使用XML 属性第1张     xmlns:xs=http://www.w3.org/2001/XMLSchema
 4CodeSmith实用技巧(六):使用XML 属性第1张     xmlns=http://www.codesmithtools.com/PO
 5CodeSmith实用技巧(六):使用XML 属性第1张     elementFormDefault="qualified" attributeFormDefault="unqualified">
 6CodeSmith实用技巧(六):使用XML 属性第1张   <xs:element name="PurchaseOrder">
 7CodeSmith实用技巧(六):使用XML 属性第1张     <xs:complexType>
 8CodeSmith实用技巧(六):使用XML 属性第1张       <xs:sequence>
 9CodeSmith实用技巧(六):使用XML 属性第1张         <xs:element name="PONumber" type="xs:string"/>
10CodeSmith实用技巧(六):使用XML 属性第1张         <xs:element name="CustomerName" type="xs:string"/>
11CodeSmith实用技巧(六):使用XML 属性第1张         <xs:element name="CustomerCity" type="xs:string"/>
12CodeSmith实用技巧(六):使用XML 属性第1张         <xs:element name="CustomerState" type="xs:string"/>
13CodeSmith实用技巧(六):使用XML 属性第1张         <xs:element name="Items">
14CodeSmith实用技巧(六):使用XML 属性第1张          <xs:complexType>
15CodeSmith实用技巧(六):使用XML 属性第1张            <xs:sequence>
16CodeSmith实用技巧(六):使用XML 属性第1张              <xs:element name="Item" maxOccurs="unbounded">
17CodeSmith实用技巧(六):使用XML 属性第1张                <xs:complexType>
18CodeSmith实用技巧(六):使用XML 属性第1张                  <xs:attribute name="ItemNumber" type="xs:string" use="required"/>
19CodeSmith实用技巧(六):使用XML 属性第1张                  <xs:attribute name="Quantity" type="xs:integer" use="required"/>
20CodeSmith实用技巧(六):使用XML 属性第1张                </xs:complexType>
21CodeSmith实用技巧(六):使用XML 属性第1张              </xs:element>
22CodeSmith实用技巧(六):使用XML 属性第1张            </xs:sequence>
23CodeSmith实用技巧(六):使用XML 属性第1张          </xs:complexType>
24CodeSmith实用技巧(六):使用XML 属性第1张         </xs:element>
25CodeSmith实用技巧(六):使用XML 属性第1张       </xs:sequence>
26CodeSmith实用技巧(六):使用XML 属性第1张     </xs:complexType>
27CodeSmith实用技巧(六):使用XML 属性第1张   </xs:element>
28CodeSmith实用技巧(六):使用XML 属性第1张</xs:schema>
29CodeSmith实用技巧(六):使用XML 属性第1张
30CodeSmith实用技巧(六):使用XML 属性第1张

这是一个简单的带有SchemaXML Property的例子:

利用这个Schema文件,我们可以定义一个XML Property来在运行时读去元数据。

CodeSmith实用技巧(六):使用XML 属性第1张<%@ CodeTemplate Language="C#" TargetLanguage="Text" Description="Create packing list from XML PO." %>
CodeSmith实用技巧(六):使用XML 属性第1张
<%@ XmlProperty Name="PurchaseOrder" Schema="PO.xsd" Optional="False" Category="Data" Description="Purchase Order to generate packing list for." %>
CodeSmith实用技巧(六):使用XML 属性第1张Packing List
CodeSmith实用技巧(六):使用XML 属性第1张
ref: PO#<%= PurchaseOrder.PONumber %>
CodeSmith实用技巧(六):使用XML 属性第1张Ship To:
CodeSmith实用技巧(六):使用XML 属性第1张
<%= PurchaseOrder.CustomerName %>
CodeSmith实用技巧(六):使用XML 属性第1张
<%= PurchaseOrder.CustomerCity  %><%= PurchaseOrder.CustomerState %>
CodeSmith实用技巧(六):使用XML 属性第1张Contents:
CodeSmith实用技巧(六):使用XML 属性第39张CodeSmith实用技巧(六):使用XML 属性第40张
<% for (int i = 0; i < PurchaseOrder.Items.Count; i++CodeSmith实用技巧(六):使用XML 属性第41张%>
CodeSmith实用技巧(六):使用XML 属性第42张
<%= PurchaseOrder.Items[i].ItemNumber %>, Quantity <%= PurchaseOrder.Items[i].Quantity %>
CodeSmith实用技巧(六):使用XML 属性第43张
<% }
 %>
CodeSmith实用技巧(六):使用XML 属性第1张
CodeSmith实用技巧(六):使用XML 属性第1张

在运行时,PurchaseOrder属性在属性面板中显示为按钮,单击后弹出一个对话框供用户选择XML文件。

CodeSmith实用技巧(六):使用XML 属性第46张

选择一个XML文件。在该例子XML文件内容如下:

 1CodeSmith实用技巧(六):使用XML 属性第1张<?xml version="1.0" encoding="UTF-8"?>
 2CodeSmith实用技巧(六):使用XML 属性第1张<PurchaseOrder xmlns=http://www.codesmithtools.com/PO
 3CodeSmith实用技巧(六):使用XML 属性第1张     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 4CodeSmith实用技巧(六):使用XML 属性第1张   <PONumber>5271</PONumber>
 5CodeSmith实用技巧(六):使用XML 属性第1张   <CustomerName>John Nelson</CustomerName>
 6CodeSmith实用技巧(六):使用XML 属性第1张   <CustomerCity>Gamonetta</CustomerCity>
 7CodeSmith实用技巧(六):使用XML 属性第1张   <CustomerState>MS</CustomerState>
 8CodeSmith实用技巧(六):使用XML 属性第1张   <Items>
 9CodeSmith实用技巧(六):使用XML 属性第1张     <Item ItemNumber="HM85" Quantity="12"/>
10CodeSmith实用技巧(六):使用XML 属性第1张     <Item ItemNumber="JR82" Quantity="4"/>
11CodeSmith实用技巧(六):使用XML 属性第1张     <Item ItemNumber="PR43" Quantity="6"/>
12CodeSmith实用技巧(六):使用XML 属性第1张   </Items>
13CodeSmith实用技巧(六):使用XML 属性第1张</PurchaseOrder>
14CodeSmith实用技巧(六):使用XML 属性第1张
15CodeSmith实用技巧(六):使用XML 属性第1张

生成后的代码如下:

CodeSmith实用技巧(六):使用XML 属性第1张Packing List
CodeSmith实用技巧(六):使用XML 属性第1张ref: PO#5271
CodeSmith实用技巧(六):使用XML 属性第1张Ship To:
CodeSmith实用技巧(六):使用XML 属性第1张John Nelson
CodeSmith实用技巧(六):使用XML 属性第1张Gamonetta, MS
CodeSmith实用技巧(六):使用XML 属性第1张Contents:
CodeSmith实用技巧(六):使用XML 属性第1张HM85, Quantity 12
CodeSmith实用技巧(六):使用XML 属性第1张JR82, Quantity 4
CodeSmith实用技巧(六):使用XML 属性第1张PR43, Quantity 6

2XML Property Without a Schema

这是一个不带SchemaXML Property的例子。这个模版在运行时可以访问任何XML文件。

CodeSmith实用技巧(六):使用XML 属性第1张<%@ CodeTemplate Language="VB" TargetLanguage="Text" Description="List top-level nodes in an XML file." %>
CodeSmith实用技巧(六):使用XML 属性第1张
<%@ XmlProperty Name="TargetFile" Optional="False" Category="Data" Description="XML file to iterate." %>
CodeSmith实用技巧(六):使用XML 属性第1张
<%@ Assembly Name="System.Xml" %>
CodeSmith实用技巧(六):使用XML 属性第1张
<%@ Import Namespace="System.Xml" %>
CodeSmith实用技巧(六):使用XML 属性第1张Top
-level nodes:
CodeSmith实用技巧(六):使用XML 属性第1张
<% Dim currNode as XmlNode
CodeSmith实用技巧(六):使用XML 属性第1张currNode 
= TargetFile.DocumentElement.FirstChild
CodeSmith实用技巧(六):使用XML 属性第1张Do Until currNode Is Nothing
%>
CodeSmith实用技巧(六):使用XML 属性第1张   
<%= currNode.InnerXml %>
CodeSmith实用技巧(六):使用XML 属性第1张
<% currNode = currNode.NextSibling()
CodeSmith实用技巧(六):使用XML 属性第1张Loop 
%>
CodeSmith实用技巧(六):使用XML 属性第1张
CodeSmith实用技巧(六):使用XML 属性第1张

概莫版对目标文件的属性并没有定义一个Schema,所以属性在模版中是作为一个XMLDocument。如果我们选择的XML文件如下所示:

1CodeSmith实用技巧(六):使用XML 属性第1张<?xml version="1.0" encoding="UTF-8"?>
2CodeSmith实用技巧(六):使用XML 属性第1张<Books>
3CodeSmith实用技巧(六):使用XML 属性第1张   <Book>UML 2.0 In a Nutshell</Book>
4CodeSmith实用技巧(六):使用XML 属性第1张   <Book>The Best Software Writing</Book>
5CodeSmith实用技巧(六):使用XML 属性第1张   <Book>Coder to Developer</Book>
6CodeSmith实用技巧(六):使用XML 属性第1张   <Book>Code Complete</Book>
7CodeSmith实用技巧(六):使用XML 属性第1张</Books>

生成后的代码:

CodeSmith实用技巧(六):使用XML 属性第1张Top-level nodes:
CodeSmith实用技巧(六):使用XML 属性第1张UML 2.0 In a Nutshell
CodeSmith实用技巧(六):使用XML 属性第1张The Best Software Writing
CodeSmith实用技巧(六):使用XML 属性第1张Coder to Developer
CodeSmith实用技巧(六):使用XML 属性第1张Code Complete
CodeSmith实用技巧(六):使用XML 属性第1张

免责声明:文章转载自《CodeSmith实用技巧(六):使用XML 属性》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇获取Android版本MEF 基础简介 一下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 前言中不允许有内容。

二月 25, 2016 9:24:24 下午 org.apache.tomcat.util.digester.SetPropertiesRule begin 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclip...

WebApi接口

格式化数据这东西,主要看需要的运用场景,今天和大家分享的是webapi格式化数据,这里面的例子主要是输出json和xml的格式数据,测试用例很接近实际常用情况;希望大家喜欢,也希望各位多多扫码支持和点赞谢谢: . 自定义一个Action,响应输出集合数据 . api返回json数据的两种方式 . json时间格式处理方式 . 让api接口支持返回json和...

C#读取带命名空间的xml,xaml文件的解决方案

使用C#读取xml文件有三种常用的方式: 1、xmlDocument 2、XmlTextReader 3、Linq To Xml 但是这些方式在读写有些带命名空间的xml时就不知道怎么办了(例如把xaml文件当作xml文件来读写的时候)。 对于xaml文件,C#虽然能用XamlReader直接把xaml文件转换为对象,但是有的时候我们只是想取得其中一些字段...

JAVA生成Word文档(经过测试)

首先告诉大家这篇文章的原始出处:http://www.havenliu.com/java/514.html/comment-page-1#comment-756 我也是根据他所描述完成的,但是有一些地方有点模糊,不容易弄出来.所以,我另外写一篇,让大家少走一些弯路. 上图:是Word文档中的内容,也就是模板,为了下面步鄹做铺垫,所以在需要输入数据的地方改...

对Xml文档进行操作(修改,删除)

<?xml version="1.0" encoding="utf-8"?><Products>  <Product proName="aa1" proPrice="12" proInfo="bb">  </Product>  <Product proName="电脑" proPrice="3200"...

XML文件与实体类的互相转换

一.将XML文件反序列化为实体类对象   1. 通常程序的配置信息都保存在程序或者网站的专门的配置文件中(App.config/web.config)。但是现在为了演示XML序列化和反序列化,将配置信息保存在一个XML文件(config.xml)中,通过反序列化将配置信息读取出来保存到一个单独的类(Config.cs)中。这样如果需要用到配置信息,没必要每...