您的位置:首页 > 其它

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

2009-10-18 17:24 429 查看

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

上一篇
/
下一篇
2007-09-26 14:24:55

文章类型:

转载

查看( 218 )
/
评论( 0 )
/
评分( 0
/ 0
)

CodeSmith
允许我们存储

元数据在
XML
文件中,然后在执行模版时直接打开
XML
文件填写到属性面板中。

1

XML Property With a Schema

1



<?
xml version="1.0" encoding="UTF-8"
?>

2



<
xs:schema
targetNamespace
=http://www.codesmithtools.com/PO

3



xmlns:xs
=http://www.w3.org/2001/XMLSchema

4



xmlns
=http://www.codesmithtools.com/PO

5



elementFormDefault
="qualified"
attributeFormDefault
="unqualified"
>

6



<
xs:element
name
="PurchaseOrder"
>

7



<
xs:complexType
>

8



<
xs:sequence
>

9



<
xs:element
name
="PONumber"
type
="xs:string"
/>

10



<
xs:element
name
="CustomerName"
type
="xs:string"
/>

11



<
xs:element
name
="CustomerCity"
type
="xs:string"
/>

12



<
xs:element
name
="CustomerState"
type
="xs:string"
/>

13



<
xs:element
name
="Items"
>

14



<
xs:complexType
>

15



<
xs:sequence
>

16



<
xs:element
name
="Item"
maxOccurs
="unbounded"
>

17



<
xs:complexType
>

18



<
xs:attribute
name
="ItemNumber"
type
="xs:string"
use
="required"
/>

19



<
xs:attribute
name
="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:complexType
>

27



</
xs:element
>

28



</
xs:schema
>

29



30



这是一个简单的带有Schema


XML Property

的例子:

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



<%
@ CodeTemplate Language
=
"
C#
"
TargetLanguage
=
"
Text
"
Description
=
"
Create packing list from XML PO.
"

%>



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

%>



Packing List



ref
: PO#
<%=
PurchaseOrder.PONumber
%>



Ship To:



<%=
PurchaseOrder.CustomerName
%>



<%=
PurchaseOrder.CustomerCity
%>
,
<%=
PurchaseOrder.CustomerState
%>



Contents:





<%

for
(
int
i
=

0
; i
<
PurchaseOrder.Items.Count; i
++
)



{
%>



<%=
PurchaseOrder.Items[i].ItemNumber
%>
, Quantity
<%=
PurchaseOrder.Items[i].Quantity
%>



<%
}

%>





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



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

1



<?
xml version="1.0" encoding="UTF-8"
?>

2



<
PurchaseOrder
xmlns
=http://www.codesmithtools.com/PO

3



xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
>

4



<
PONumber
>
5271
</
PONumber
>

5



<
CustomerName
>
John Nelson
</
CustomerName
>

6



<
CustomerCity
>
Gamonetta
</
CustomerCity
>

7



<
CustomerState
>
MS
</
CustomerState
>

8



<
Items
>

9



<
Item
ItemNumber
="HM85"
Quantity
="12"
/>

10



<
Item
ItemNumber
="JR82"
Quantity
="4"
/>

11



<
Item
ItemNumber
="PR43"
Quantity
="6"
/>

12



</
Items
>

13



</
PurchaseOrder
>

14



15



生成后的代码如下:



Packing List



ref: PO#5271



Ship To:



John Nelson



Gamonetta, MS



Contents:



HM85, Quantity 12



JR82, Quantity 4



PR43, Quantity 6

2

XML Property Without a Schema

这是一个不带
Schema

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



<%
@ CodeTemplate Language
=
"
VB
"
TargetLanguage
=
"
Text
"
Description
=
"
List top-level nodes in an XML file.
"

%>



<%
@ XmlProperty Name
=
"
TargetFile
"
Optional
=
"
False
"
Category
=
"
Data
"
Description
=
"
XML file to iterate.
"

%>



<%
@ Assembly Name
=
"
System.Xml
"

%>



<%
@ Import Namespace
=
"
System.Xml
"

%>



Top
-
level nodes:



<%
Dim currNode
as
XmlNode



currNode
=
TargetFile.DocumentElement.FirstChild



Do Until currNode Is Nothing
%>



<%=
currNode.InnerXml
%>



<%
currNode
=
currNode.NextSibling()



Loop
%>





概莫版对目标文件的属性并没有定义一个Schema

,所以属性在模版中是作为一个
XMLDocument

。如果我们选择的
XML

文件如下所示:

1



<?
xml version="1.0" encoding="UTF-8"
?>

2



<
Books
>

3



<
Book
>
UML 2.0 In a Nutshell
</
Book
>

4



<
Book
>
The Best Software Writing
</
Book
>

5



<
Book
>
Coder to Developer
</
Book
>

6



<
Book
>
Code Complete
</
Book
>

7



</
Books
>

生成后的代码:



Top-level nodes:



UML 2.0 In a Nutshell



The Best Software Writing



Coder to Developer



Code Complete

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: