1+ #!/usr/bin/python
2+ # -*- coding: utf-8 -*-
3+
4+ '''
5+ Created on 2012-12-19
6+
7+ @author: hill
8+ '''
9+ from pyprotocol2sc .xmltool import *
10+ from xml .dom import minidom
11+ from pyprotocol2sc .protocol import Protocol , ProtocolRequest , ProtocolResponse ,\
12+ ProtocolDataNull , ProtocolDataItemArray , ProtocolDataItemSingelField ,\
13+ ProtocolDataItemList , ProtocolDataItemComplexField , ProtocolDataResult
14+
15+ def parseProtocol (protocol_node , protocol ):
16+ protocol .id = protocol_node .attributes ['id' ].value
17+ protocol .name = protocol_node .attributes ['name' ].value
18+ protocol .description = protocol_node .attributes ['description' ].value
19+ request_node = get_first_node_by_name (protocol_node , 'Request' )
20+ if request_node :
21+ protocol .request = ProtocolRequest ()
22+ parseRequest (request_node , protocol .request )
23+ response_node = get_first_node_by_name (protocol_node , 'Response' )
24+ if response_node :
25+ protocol .response = ProtocolResponse ()
26+ parseResponse (response_node , protocol .response )
27+
28+ def parseRequest (request_node , request ):
29+ children = request_node .childNodes
30+ request .type = request_node .attributes ['type' ].value
31+ for node in children :
32+ if node .nodeName == 'DataGroup' :
33+ parseDataGroup (node , request )
34+ elif node .nodeName == 'Null' :
35+ parseNull (node , request )
36+
37+
38+ def parseResponse (response_node , response ):
39+ children = response_node .childNodes
40+ response .type = response_node .attributes ['type' ].value
41+ for node in children :
42+ if node .nodeName == 'DataGroup' :
43+ parseDataGroup (node , response )
44+ elif node .nodeName == 'Null' :
45+ parseNull (node , response )
46+ elif node .nodeName == 'Result' :
47+ parseResult (node , response )
48+
49+ def parseResult (node , response ):
50+ result = ProtocolDataResult ()
51+ result .code = node .attributes ['code' ].value
52+ result .reason = node .attributes ['reason' ].value
53+ result .msg = node .attributes ['msg' ].value
54+ response .result = result
55+
56+ def parseDataGroup (dataGroupNode , data_contrainer ):
57+ data_list = data_contrainer .data_list
58+ children = dataGroupNode .childNodes
59+ for node in children :
60+ if node .nodeName == 'ItemArray' :
61+ data_list .append (parseDataTtemArray (node ))
62+ elif node .nodeName == 'ItemList' :
63+ data_list .append (parseDataItemList (node ))
64+ elif node .nodeName == 'ItemSingleField' :
65+ data_list .append (parseDataItemSingleField (node ))
66+ elif node .nodeName == 'ItemComplexField' :
67+ data_list .append (parseDataItemComplexField (node ))
68+
69+ def parseNull (node , data_contrainer ):
70+ data_contrainer .data_list .append (ProtocolDataNull ())
71+
72+ def parseDataTtemArray (itemArrayNode ):
73+ children = itemArrayNode .childNodes
74+ item_array = ProtocolDataItemArray ()
75+ item_array .name = itemArrayNode .attributes ['name' ].value
76+ item_array .description = itemArrayNode .attributes ['description' ].value
77+ for node in children :
78+ if node .nodeName == 'ItemSingleField' :
79+ item_array .append (parseDataItemSingleField (node , item_array .item_list ))
80+ return item_array
81+
82+ def parseDataItemSingleField (itemSingleFieldNode ):
83+ item_single_field = ProtocolDataItemSingelField ()
84+ item_single_field .name = itemSingleFieldNode .attributes ['name' ].value
85+ item_single_field .type = itemSingleFieldNode .attributes ['type' ].value
86+ item_single_field .description = itemSingleFieldNode .attributes ['description' ].value
87+ return item_single_field
88+
89+ def parseDataItemComplexField (itemComplexFieldNode ):
90+ item_complex_field = ProtocolDataItemComplexField ()
91+ field_dict = item_complex_field .field_dict
92+ children = itemComplexFieldNode .childNodes
93+ item_complex_field .name = itemComplexFieldNode .attributes ['name' ].value
94+ item_complex_field .description = itemComplexFieldNode .attributes ['description' ].value
95+ for node in children :
96+ if node .nodeName == 'ItemArray' :
97+ name = node .attributes ['name' ].value
98+ field_dict [name ]= parseDataTtemArray (node )
99+ elif node .nodeName == 'ItemList' :
100+ name = node .attributes ['name' ].value
101+ field_dict [name ]= parseDataItemList (node )
102+ elif node .nodeName == 'ItemSingleField' :
103+ name = node .attributes ['name' ].value
104+ field_dict [name ]= parseDataItemSingleField (node )
105+ elif node .nodeName == 'ItemComplexField' :
106+ name = node .attributes ['name' ].value
107+ field_dict [name ]= parseDataItemComplexField (node )
108+ return item_complex_field
109+
110+ def parseDataItemList (itemListNode ):
111+ children = itemListNode .childNodes
112+ item_list = ProtocolDataItemList ()
113+ item_list .name = itemListNode .attributes ['name' ].value
114+ item_list .description = itemListNode .attributes ['description' ].value
115+ for node in children :
116+ if node .nodeName == 'ItemComplexField' :
117+ item_list .item_list .append (parseDataItemComplexField (node ))
118+ return item_list
119+
120+ def parse_xml (xml_file ):
121+ doc = minidom .parse (xml_file )
122+ root = doc .documentElement
123+ protocol_nodes = get_nodes_by_name (root ,'Protocol' )
124+ for protocol_node in protocol_nodes :
125+ protocol = Protocol ()
126+ parseProtocol (protocol_node , protocol )
127+ print protocol
128+
129+ def main ():
130+ parse_xml ('../data/protocol/protocol.xml' )
131+
132+
133+ if __name__ == '__main__' :
134+ main ()
0 commit comments