-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxmlParse.py
224 lines (155 loc) · 5.12 KB
/
xmlParse.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
import xml.etree.ElementTree as et
def get_stats_str(lst):
result = [str(i) + ':' + str(k) + '\n' for i in list(lst.keys()) for k in list(lst.values())]
result = list(set(result))
return ''.join(result)
# collect OS information
def get_os_family(root):
system_info = root.find("sys")
if system_info is None:
return ''
for info in system_info:
if info.tag == "os_family":
return info.text
# collect processor information
def get_processor_description(root):
proc_info = root.find("processor/item")
if proc_info is None:
return ''
for info in proc_info:
if info.tag == "description":
return info.text
# collect memory information
def get_memory_size(root):
mem_info = root.find("memory")
if mem_info is None:
return '0'
size = 0
for info in mem_info:
if info.tag == "size":
size += int(info.text)
return str(size)
# collect video card information
def get_video_card_model_and_size(root):
video_info = root.find("video/item")
if video_info is None:
return '', ''
manufacturer = []
for info in video_info:
if info.tag == "manufacturer":
manufacturer.append(info.text)
return manufacturer
# get audio card information
def get_audio_card_model(root):
sound_info = root.find("sound/item")
if sound_info is None:
return ''
for info in sound_info:
if info.tag == "model":
return info.text
def parse_data(filename):
tree = et.parse(filename)
root = tree.getroot()
os_family = get_os_family(root)
proc_description = get_processor_description(root)
video_card = get_video_card_model_and_size(root)
audio_card = get_audio_card_model(root)
return os_family, proc_description, \
video_card, audio_card
def parse_sys_info(root):
system_info = root.find("sys")
if system_info is None:
return ''
sys_data = []
for info in system_info:
if info.text is not None:
sys_data.append(str(info.tag + ":" + info.text + '\n'))
result = ''.join(sys_data)
return result
def parse_processor_info(root):
processor_info = root.find("processor/item")
if processor_info is None:
return ''
processor_data = []
for info in processor_info:
if info.text is not None:
processor_data.append(str(info.tag + ":" + info.text + '\n'))
result = ''.join(processor_data)
return result
def parse_memory_info(root):
memory_info = root.find("memory")
if memory_info is None:
return ''
memory_data = []
for info in memory_info.findall("item"):
for item in info:
print(item.tag, item.text)
memory_data.append(str(item.tag + ":" + item.text + '\n'))
result = ''.join(memory_data)
return result
def parse_motherboard_info(root):
motherboard_info = root.find("motherboard/item")
if motherboard_info is None:
return ''
motherboard_data = []
for info in motherboard_info:
if info.text is not None:
motherboard_data.append(str(info.tag + ":" + info.text + '\n'))
result = ''.join(motherboard_data)
return result
def parse_video_card_info(root):
video_card_info = root.find("video/item")
if video_card_info is None:
return ''
video_card_data = []
for info in video_card_info:
if info.text is not None:
video_card_data.append(str(info.tag + ":" + info.text + '\n'))
result = ''.join(video_card_data)
return result
def parse_sound_info(root):
sound_info = root.find("sound/item")
if sound_info is None:
return ''
sound_data = []
for info in sound_info:
if info.text is not None:
sound_data.append(str(info.tag + ":" + info.text + '\n'))
result = ''.join(sound_data)
return result
def parse_ip_info(root):
ip_info = root.findall("ip")
if ip_info is None:
return ''
ip_data = []
for item in ip_info:
for info in item:
if info.text is not None:
ip_data.append(str(info.tag + ":" + info.text + '\n'))
result = ''.join(ip_data)
return result
def parse_disk_info(root):
disk_info = root.findall("disk")
if disk_info is None:
return ''
disk_data = []
for item in disk_info:
for info in item:
print(info.tag, info.text, sep=' : ', end='\n')
if info.text is not None:
disk_data.append(str(info.tag + ":" + info.text + '\n'))
result = ''.join(disk_data)
return result
def parse_client_response(filename):
tree = et.parse(filename)
root = tree.getroot()
sys_data = parse_sys_info(root)
processor_data = parse_processor_info(root)
memory_data = parse_memory_info(root)
motherboard_data = parse_motherboard_info(root)
sound_data = parse_sound_info(root)
video_card_data = parse_video_card_info(root)
network_data = parse_ip_info(root)
return sys_data, processor_data, memory_data, \
motherboard_data, sound_data, video_card_data, \
network_data