课程表

CodeSmith课程

工具箱
速查手册

使用 XMLProperty

当前位置:免费教程 » 软件/图像 » CodeSmith

在前面 CodeSmith 使用教程(6): 基本语法-声明和使用属性介绍了 CodeSmith 中使用属性的基本方法,模板中的属性是通过 Property 指令来定义。

CodeSmith 也支持使用 XML 文档来定义属性,可以把一些配置属性定义到 XML 文件中,定义 XML 的属性是使用 XmlProperty 来定义:

  1. <%@ XmlProperty Name="PurchaseOrder"
  2. Schema="PO.xsd"
  3. Optional="False"
  4. Category="Data"
  5. Description="Purchase Order to generate packing list for." %>

XmlProperty 指令可以有多个参数,除 Name 为必须的外,其它的参考都是可选的。

属性参数的介绍:

  • Name:模版使用的参数的名称,必须为有效的模板语言名称,比如使用 C#,Name 必须为有效的 C#变量名。但提供 XML 的 Schema 文件时,这个变量的类型为一个 XmlDocument 实例。
  • Schema:XML 属性对应的 Schema 文件名,可以用来校验存放 XML 属性的 XML 文件是否有效,如果提供了 Schema 文件,CodeSmith 在代码模板中支持 IntelliSense。
  • Default:设置默认值。
  • Category:用来说明这个属性在 CodeSmith Explorer 的属性面板中显示成什么类型,例如下拉选择、直接输入等。
  • Description:在属性面板中对于这个属性的描述。
  • Optional:设置这个属性是否是必须的,设置为 True 表明这个参数值可有可无,设置为 False 则这个参数必须有值。
  • OnChanged 为属性发生变化时定义事件处理代码。
  • RootElement: 指定 XML 根元素的相对路径。

本例使用 CodeSmith 自带的一个例子,使用 PurchaseOrder.xsd ,XML 的定义如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <xs:schema targetNamespace="http://www.codesmithtools.com/purchaseorder"
  3. elementFormDefault="qualified"
  4. xmlns="http://www.codesmithtools.com/purchaseorder"
  5. xmlns:xs="http://www.w3.org/2001/XMLSchema">
  6. <xs:element name="PurchaseOrder">
  7. <xs:complexType>
  8. <xs:sequence>
  9. <xs:element name="OrderDate" type="xs:string" minOccurs="1" maxOccurs="1" />
  10. <xs:element name="SubTotal" type="xs:string" minOccurs="1" maxOccurs="1" />
  11. <xs:element name="ShipCost" type="xs:string" minOccurs="0" maxOccurs="1" />
  12. <xs:element name="TotalCost" type="xs:string" minOccurs="1" maxOccurs="1" />
  13. <xs:element name="ShipTo" minOccurs="0" maxOccurs="1">
  14. <xs:complexType>
  15. <xs:sequence>
  16. <xs:element name="Line1" type="xs:string" minOccurs="0" maxOccurs="1" />
  17. <xs:element name="City" type="xs:string" minOccurs="0" maxOccurs="1" />
  18. <xs:element name="State" type="xs:string" minOccurs="0" maxOccurs="1" />
  19. <xs:element name="Zip" type="xs:string" minOccurs="0" maxOccurs="1" />
  20. </xs:sequence>
  21. <xs:attribute name="Name" type="xs:string" />
  22. </xs:complexType>
  23. </xs:element>
  24. <xs:element name="Items" minOccurs="0" maxOccurs="1">
  25. <xs:complexType>
  26. <xs:sequence>
  27. <xs:element name="OrderedItem" minOccurs="0" maxOccurs="unbounded">
  28. <xs:complexType>
  29. <xs:sequence>
  30. <xs:element name="ItemName" type="xs:string" minOccurs="1" maxOccurs="1" />
  31. <xs:element name="Description" type="xs:string" minOccurs="0" maxOccurs="1" />
  32. <xs:element name="UnitPrice" type="xs:string" minOccurs="1" maxOccurs="1" />
  33. <xs:element name="Quantity" type="xs:string" minOccurs="1" maxOccurs="1" />
  34. <xs:element name="LineTotal" type="xs:string" minOccurs="1" maxOccurs="1" />
  35. </xs:sequence>
  36. </xs:complexType>
  37. </xs:element>
  38. </xs:sequence>
  39. </xs:complexType>
  40. </xs:element>
  41. </xs:sequence>
  42. </xs:complexType>
  43. </xs:element>
  44. </xs:schema>

与这个 XML Schema 配合使用的用来存放 XML 属性的 XML 文件为 SamplePurchaseOrder.xml ,其定义如下:

  1. <?xml version="1.0"?>
  2. <PurchaseOrder xmlns="http://www.codesmithtools.com/purchaseorder">
  3. <ShipTo Name="Eric J. Smith">
  4. <Line1>123 Test Dr.</Line1>
  5. <City>Dallas</City>
  6. <State>TX</State>
  7. <Zip>75075</Zip>
  8. </ShipTo>
  9. <OrderDate>05-01-2003</OrderDate>
  10. <Items>
  11. <OrderedItem>
  12. <ItemName>Item #1</ItemName>
  13. <Description>Item #1 Description</Description>
  14. <UnitPrice>5.45</UnitPrice>
  15. <Quantity>3</Quantity>
  16. <LineTotal>16.35</LineTotal>
  17. </OrderedItem>
  18. <OrderedItem>
  19. <ItemName>Item #2</ItemName>
  20. <Description>Item #2 Description</Description>
  21. <UnitPrice>12.75</UnitPrice>
  22. <Quantity>8</Quantity>
  23. <LineTotal>102.00</LineTotal>
  24. </OrderedItem>
  25. </Items>
  26. <SubTotal>45.23</SubTotal>
  27. <ShipCost>5.23</ShipCost>
  28. <TotalCost>50.46</TotalCost>
  29. </PurchaseOrder>

定义一个简单的模板,把 SamplePurchaseOrder.xml 中的内容重新输出,可以在代码模板中定义一个XMLProperty ,其 Schema 指定为 PurchaseOrder.xsd

  1. <%--
  2. This template demonstates using the XmlProperty directive
  3. --%>
  4. <%@ CodeTemplate Language="C#" TargetLanguage="Text"
  5. Description="Demonstrates using the Xml serializer." %>
  6. <%@ XmlProperty
  7. Name="MyPurchaseOrder"
  8. Schema="PurchaseOrder.xsd"
  9. Default="SamplePurchaseOrder.xml" %>
  10. This file generated by CodeSmith on <%= DateTime.Now.ToLongDateString() %>
  11. PurchaseOrder:
  12. Address:
  13. Name: <%= MyPurchaseOrder.ShipTo.Name %>
  14. Line1: <%= MyPurchaseOrder.ShipTo.Line1 %>
  15. City: <%= MyPurchaseOrder.ShipTo.City %>
  16. State: <%= MyPurchaseOrder.ShipTo.State %>
  17. Zip: <%= MyPurchaseOrder.ShipTo.Zip %>
  18. OrderDate: <%= MyPurchaseOrder.OrderDate %>
  19. Items:
  20. <% for (int i = 0; i < MyPurchaseOrder.Items.Count; i++) { %>
  21. <%= i %>:
  22. ItemName: <%= MyPurchaseOrder.Items[i].ItemName %>
  23. Description: <%= MyPurchaseOrder.Items[i].Description %>
  24. UnitPrice: <%= MyPurchaseOrder.Items[i].UnitPrice %>
  25. Quantity: <%= MyPurchaseOrder.Items[i].Quantity %>
  26. LineTotal: <%= MyPurchaseOrder.Items[i].LineTotal %>
  27. <% } %>
  28. SubTotal: <%= MyPurchaseOrder.SubTotal %>
  29. ShipCost: <%= MyPurchaseOrder.ShipCost %>
  30. TotalCost: <%= MyPurchaseOrder.TotalCost %>

模板中定义的 XML 属性名为 MyPurchaseOrder 对应的 Schema 为 PurchaseOrder.xsd ,因此在代码模板可以通过 MyPurchaseOrder.ShipTo.Name 的格式来直接引用 XML Schema 中定义的元素,CoddSmith 也支持 IntelliSense。

运行该模板,首先需要为 MyPurchaseOrder 选择合适的 XML 文件:

第32张

如果选择的文件不符合指定的 XML Schema,CodeSmith 不允许选择该文件,本例使用预先定义的SamplePurchaseOrder.xml ,生成的文件如下:

  1. This file generated by CodeSmith on Saturday, 12 January 2013
  2. PurchaseOrder:
  3. Address:
  4. Name: Eric J. Smith
  5. Line1: 123 Test Dr.
  6. City: Dallas
  7. State: TX
  8. Zip: 75075
  9. OrderDate: 05-01-2003
  10. Items:
  11. 0:
  12. ItemName: Item #1
  13. Description: Item #1 Description
  14. UnitPrice: 5.45
  15. Quantity: 3
  16. LineTotal: 16.35
  17. 1:
  18. ItemName: Item #2
  19. Description: Item #2 Description
  20. UnitPrice: 12.75
  21. Quantity: 8
  22. LineTotal: 102.00
  23. SubTotal: 45.23
  24. ShipCost: 5.23
  25. TotalCost: 50.46
转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号