1
using System;
2
using System.Xml;
3
using System.Web;
4
namespace MX.XML
5

{
6
/**//// <summary>
7
/// XML核心类:
8
/// 必需用XPath表达式来获取相应节点
9
/// </summary>
10
public class Core
11
{
12
变量-----------------------------------------------------------#region 变量-----------------------------------------------------------
13
/**//// <summary>
14
/// xml文件所在路径类型
15
/// </summary>
16
/// <remarks>xml文件所在路径类型</remarks>
17
public enum enumXmlPathType
18
{
19
/**//// <summary>
20
/// 绝对路径
21
/// </summary>
22
AbsolutePath,
23
/**//// <summary>
24
/// 虚拟路径
25
/// </summary>
26
VirtualPath
27
}
28
29
private string xmlFilePath;
30
private enumXmlPathType xmlFilePathType;
31
private XmlDocument xmlDoc = new XmlDocument();
32
#endregion
33
34
属性-----------------------------------------------------------#region 属性-----------------------------------------------------------
35
/**//// <summary>
36
/// 文件路径
37
/// </summary>
38
/// <remarks>文件路径</remarks>
39
public string XmlFilePath
40
{
41
get
42
{
43
return this.xmlFilePath;
44
}
45
set
46
{
47
xmlFilePath = value;
48
49
}
50
}
51
52
/**//// <summary>
53
/// 文件路径类型
54
/// </summary>
55
public enumXmlPathType XmlFilePathTyp
56
{
57
set
58
{
59
xmlFilePathType = value;
60
}
61
}
62
#endregion
63
64
构造函数-------------------------------------------------------#region 构造函数-------------------------------------------------------
65
/**//// <summary>
66
/// 构造函数
67
/// </summary>
68
/// <param >文件路径</param>
69
public Core(string tempXmlFilePath)
70
{
71
this.xmlFilePathType = enumXmlPathType.VirtualPath;
72
this.xmlFilePath = tempXmlFilePath;
73
GetXmlDocument();
74
//xmlDoc.Load( xmlFilePath ) ;
75
}
76
77
/**//// <summary>
78
/// 构造函数
79
/// </summary>
80
/// <param >文件路径</param>
81
/// <param >类型</param>
82
public Core(string tempXmlFilePath, enumXmlPathType tempXmlFilePathType)
83
{
84
this.xmlFilePathType = tempXmlFilePathType;
85
this.xmlFilePath = tempXmlFilePath;
86
GetXmlDocument();
87
}
88
89
/**////<summary>
90
///获取XmlDocument实体类
91
///</summary>
92
/// <returns>指定的XML描述文件的一个xmldocument实例</returns>
93
private XmlDocument GetXmlDocument()
94
{
95
XmlDocument doc = null;
96
97
if (this.xmlFilePathType == enumXmlPathType.AbsolutePath)
98
{
99
doc = GetXmlDocumentFromFile(xmlFilePath);
100
}
101
else if (this.xmlFilePathType == enumXmlPathType.VirtualPath)
102
{
103
doc = GetXmlDocumentFromFile(HttpContext.Current.Server.MapPath(xmlFilePath));
104
}
105
return doc;
106
}
107
108
private XmlDocument GetXmlDocumentFromFile(string tempXmlFilePath)
109
{
110
string xmlFileFullPath = tempXmlFilePath;
111
xmlDoc.Load(xmlFileFullPath);
112
//定义事件处理
113
xmlDoc.NodeChanged += new XmlNodeChangedEventHandler(this.nodeUpdateEvent);
114
xmlDoc.NodeInserted += new XmlNodeChangedEventHandler(this.nodeInsertEvent);
115
xmlDoc.NodeRemoved += new XmlNodeChangedEventHandler(this.nodeDeleteEvent);
116
return xmlDoc;
117
}
118
119
#endregion
120
121
获取所有指定名称的节点#region 获取所有指定名称的节点
122
/**//// <summary>
123
/// 功能:
124
/// 获取所有指定名称的节点(XmlNodeList)
125
/// </summary>
126
/// <param >节点名称</param>
127
public XmlNodeList GetXmlNodeList(string strNode)
128
{
129
XmlNodeList strReturn = null;
130
try
131
{
132
//根据指定路径获取节点
133
XmlNodeList xmlNode = xmlDoc.SelectNodes(strNode);
134
if (!(xmlNode == null))
135
{
136
strReturn = xmlNode;
137
}
138
}
139
catch (XmlException xmle)
140
{
141
throw xmle;
142
}
143
return strReturn;
144
}
145
#endregion
146
147
读取指定节点的指定属性值---------------------------------------#region 读取指定节点的指定属性值---------------------------------------
148
/**//// <summary>
149
/// 功能:
150
/// 读取指定节点的指定属性值(Value)
151
/// </summary>
152
/// <param >节点名称</param>
153
/// <param >此节点的属性</param>
154
/// <returns></returns>
155
public string GetXmlNodeAttributeValue(string strNode, string strAttribute)
156
{
157
string strReturn = "";
158
try
159
{
160
//根据指定路径获取节点
161
XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode);
162
if (!(xmlNode == null))
163
{
164
strReturn = xmlNode.Attributes.GetNamedItem(strAttribute).Value;
165
166
/**/////获取节点的属性,并循环取出需要的属性值
167
//XmlAttributeCollection xmlAttr = xmlNode.Attributes;
168
//for (int i = 0; i < xmlAttr.Count; i++)
169
//{
170
// if (xmlAttr.Item(i).Name == strAttribute)
171
// {
172
// strReturn = xmlAttr.Item(i).Value;
173
// break;
174
// }
175
//}
176
}
177
}
178
catch (XmlException xmle)
179
{
180
throw xmle;
181
}
182
return strReturn;
183
}
184
#endregion
185
186
读取指定节点的值-----------------------------------------------#region 读取指定节点的值-----------------------------------------------
187
/**//// <summary>
188
/// 功能:
189
/// 读取指定节点的值(InnerText)
190
/// </summary>
191
/// <param >节点名称</param>
192
/// <returns></returns>
193
public string GetXmlNodeValue(string strNode)
194
{
195
string strReturn = String.Empty;
196
try
197
{
198
//根据路径获取节点
199
XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode);
200
if (!(xmlNode == null))
201
strReturn = xmlNode.InnerText;
202
}
203
catch (XmlException xmle)
204
{
205
throw xmle;
206
}
207
return strReturn;
208
}
209
#endregion
210
211
设置节点值-----------------------------------------------------#region 设置节点值-----------------------------------------------------
212
/**//// <summary>
213
/// 功能:
214
/// 设置节点值(InnerText)
215
/// </summary>
216
/// <param >节点的名称</param>
217
/// <param >节点值</param>
218
public void SetXmlNodeValue(string xmlNodePath, string xmlNodeValue)
219
{
220
try
221
{
222
//可以批量为符合条件的节点进行付值
223
XmlNodeList xmlNode = this.xmlDoc.SelectNodes(xmlNodePath);
224
if (!(xmlNode == null))
225
{
226
foreach (XmlNode xn in xmlNode)
227
{
228
xn.InnerText = xmlNodeValue;
229
}
230
}
231
/**//**/
232
/**//*
233
* 根据指定路径获取节点
234
XmlNode xmlNode = xmlDoc.SelectSingleNode(xmlNodePath) ;
235
//设置节点值
236
if (!(xmlNode==null))
237
xmlNode.InnerText = xmlNodeValue ;*/
238
}
239
catch (XmlException xmle)
240
{
241
throw xmle;
242
}
243
}
244
#endregion
245
246
设置节点的属性值-----------------------------------------------#region 设置节点的属性值-----------------------------------------------
247
/**//// <summary>
248
/// 功能:
249
/// 设置节点的属性值
250
/// </summary>
251
/// <param >节点名称</param>
252
/// <param >属性名称</param>
253
/// <param >属性值</param>
254
public void SetXmlNodeAttributeValue(string xmlNodePath, string xmlNodeAttribute, string xmlNodeAttributeValue)
255
{
256
try
257
{
258
//可以批量为符合条件的节点的属性付值
259
XmlNodeList xmlNode = this.xmlDoc.SelectNodes(xmlNodePath);
260
if (!(xmlNode == null))
261
{
262
foreach (XmlNode xn in xmlNode)
263
{
264
XmlAttributeCollection xmlAttr = xn.Attributes;
265
for (int i = 0; i < xmlAttr.Count; i++)
266
{
267
if (xmlAttr.Item(i).Name == xmlNodeAttribute)
268
{
269
xmlAttr.Item(i).Value = xmlNodeAttributeValue;
270
break;
271
}
272
}
273
}
274
}
275
}
276
catch (XmlException xmle)
277
{
278
throw xmle;
279
}
280
}
281
#endregion
282
283
添加-----------------------------------------------------------#region 添加-----------------------------------------------------------
284
/**//// <summary>
285
/// 获取XML文件的根元素
286
/// </summary>
287
public XmlNode GetXmlRoot()
288
{
289
return xmlDoc.DocumentElement;
290
}
291
292
/**//// <summary>
293
/// 在根节点下添加父节点
294
/// </summary>
295
public void AddParentNode(string parentNode)
296
{
297
try
298
{
299
XmlNode root = GetXmlRoot();
300
XmlNode parentXmlNode = xmlDoc.CreateElement(parentNode);
301
root.AppendChild(parentXmlNode);
302
}
303
catch (XmlException xmle)
304
{
305
throw xmle;
306
}
307
}
308
309
/**//// <summary>
310
/// 向一个已经存在的父节点中插入一个子节点,并返回子节点.
311
/// </summary>
312
/// <param >父节点</param>
313
/// <param >字节点名称</param>
314
public XmlNode AddChildNode(string parentNodePath, string childnodename)
315
{
316
XmlNode childXmlNode = null;
317
try
318
{
319
XmlNode parentXmlNode = xmlDoc.SelectSingleNode(parentNodePath);
320
if (!((parentXmlNode) == null))//如果此节点存在
321
{
322
childXmlNode = xmlDoc.CreateElement(childnodename);
323
parentXmlNode.AppendChild(childXmlNode);
324
}
325
else
326
{//如果不存在就放父节点添加
327
this.GetXmlRoot().AppendChild(childXmlNode);
328
}
329
}
330
catch (XmlException xmle)
331
{
332
throw xmle;
333
}
334
return childXmlNode;
335
}
336
/**//// <summary>
337
/// 向一个已经存在的父节点中插入一个子节点,并添加一个属性
338
/// </summary>
339
public void AddChildNode(string parentNodePath, string childnodename, string NodeAttribute, string NodeAttributeValue)
340
{
341
try
342
{
343
XmlNode parentXmlNode = xmlDoc.SelectSingleNode(parentNodePath);
344
XmlNode childXmlNode = null;
345
if (!((parentXmlNode) == null))//如果此节点存在
346
{
347
childXmlNode = xmlDoc.CreateElement(childnodename);
348
349
//添加属性
350
XmlAttribute nodeAttribute = this.xmlDoc.CreateAttribute(NodeAttribute);
351
nodeAttribute.Value = NodeAttributeValue;
352
childXmlNode.Attributes.Append(nodeAttribute);
353
354
parentXmlNode.AppendChild(childXmlNode);
355
}
356
else
357
{//如果不存在就放父节点添加
358
this.GetXmlRoot().AppendChild(childXmlNode);
359
}
360
}
361
catch (XmlException xmle)
362
{
363
throw xmle;
364
}
365
}
366
367
/**//// <summary>
368
/// 向一个节点添加属性,值为空
369
/// </summary>
370
/// <param >节点路径</param>
371
/// <param >属性名</param>
372
public void AddAttribute(string NodePath, string NodeAttribute)
373
{
374
privateAddAttribute(NodePath, NodeAttribute, "");
375
}
376
/**//// <summary>
377
/// 向一个节点添加属性,并赋值***
378
/// </summary>
379
public void AddAttribute(XmlNode childXmlNode, string NodeAttribute, string NodeAttributeValue)
380
{
381
XmlAttribute nodeAttribute = this.xmlDoc.CreateAttribute(NodeAttribute);
382
nodeAttribute.Value = NodeAttributeValue;
383
childXmlNode.Attributes.Append(nodeAttribute);
384
}
385
386
/**//// <summary>
387
/// 向一个节点添加属性
388
/// </summary>
389
/// <param >节点路径</param>
390
/// <param >属性名</param>
391
/// <param >属性值</param>
392
private void privateAddAttribute(string NodePath, string NodeAttribute, string NodeAttributeValue)
393
{
394
try
395
{
396
XmlNode nodePath = xmlDoc.SelectSingleNode(NodePath);
397
if (!(nodePath == null))
398
{
399
XmlAttribute nodeAttribute = this.xmlDoc.CreateAttribute(NodeAttribute);
400
nodeAttribute.Value = NodeAttributeValue;
401
nodePath.Attributes.Append(nodeAttribute);
402
}
403
}
404
catch (XmlException xmle)
405
{
406
throw xmle;
407
}
408
}
409
/**//// <summary>
410
/// 向一个节点添加属性,并赋值
411
/// </summary>
412
/// <param >节点</param>
413
/// <param >属性名</param>
414
/// <param >属性值</param>
415
public void AddAttribute(string NodePath, string NodeAttribute, string NodeAttributeValue)
416
{
417
privateAddAttribute(NodePath, NodeAttribute, NodeAttributeValue);
418
}
419
#endregion
420
421
删除-----------------------------------------------------------#region 删除-----------------------------------------------------------
422
/**//// <summary>
423
/// 删除节点的一个属性
424
/// </summary>
425
/// <param >节点所在的xpath表达式</param>
426
/// <param >属性名</param>
427
public void DeleteAttribute(string NodePath, string NodeAttribute)
428
{
429
XmlNodeList nodePath = this.xmlDoc.SelectNodes(NodePath);
430
if (!(nodePath == null))
431
{
432
foreach (XmlNode tempxn in nodePath)
433
{
434
XmlAttributeCollection xmlAttr = tempxn.Attributes;
435
for (int i = 0; i < xmlAttr.Count; i++)
436
{
437
if (xmlAttr.Item(i).Name == NodeAttribute)
438
{
439
tempxn.Attributes.RemoveAt(i);
440
break;
441
}
442
}
443
}
444
}
445
}
446
447
/**//// <summary>
448
/// 删除节点的一个属性,当其属性值等于给定的值时
449
/// </summary>
450
/// <param >节点所在的xpath表达式</param>
451
/// <param >属性</param>
452
/// <param >值</param>
453
public void DeleteAttribute(string NodePath, string NodeAttribute, string NodeAttributeValue)
454
{
455
XmlNodeList nodePath = this.xmlDoc.SelectNodes(NodePath);
456
if (!(nodePath == null))
457
{
458
foreach (XmlNode tempxn in nodePath)
459
{
460
XmlAttributeCollection xmlAttr = tempxn.Attributes;
461
for (int i = 0; i < xmlAttr.Count; i++)
462
{
463
if (xmlAttr.Item(i).Name == NodeAttribute && xmlAttr.Item(i).Value == NodeAttributeValue)
464
{
465
tempxn.Attributes.RemoveAt(i);
466
break;
467
}
468
}
469
}
470
}
471
}
472
/**//// <summary>
473
/// 删除节点
474
/// </summary>
475
/// <param ></param>
476
/// <remarks></remarks>
477
public void DeleteXmlNode(string tempXmlNode)
478
{
479
XmlNodeList nodePath = this.xmlDoc.SelectNodes(tempXmlNode);
480
if (!(nodePath == null))
481
{
482
foreach (XmlNode xn in nodePath)
483
{
484
xn.ParentNode.RemoveChild(xn);
485
}
486
}
487
}
488
489
#endregion
490
491
XML文档事件----------------------------------------------------#region XML文档事件----------------------------------------------------
492
/**//// <summary>
493
/// 节点插入事件
494
/// </summary>
495
/// <param ></param>
496
/// <param ></param>
497
private void nodeInsertEvent(Object src, XmlNodeChangedEventArgs args)
498
{
499
//保存设置
500
SaveXmlDocument();
501
}
502
/**//// <summary>
503
/// 节点删除事件
504
/// </summary>
505
/// <param ></param>
506
/// <param ></param>
507
private void nodeDeleteEvent(Object src, XmlNodeChangedEventArgs args)
508
{
509
//保存设置
510
SaveXmlDocument();
511
}
512
/**//// <summary>
513
/// 节点更新事件
514
/// </summary>
515
/// <param ></param>
516
/// <param ></param>
517
private void nodeUpdateEvent(Object src, XmlNodeChangedEventArgs args)
518
{
519
//保存设置
520
SaveXmlDocument();
521
}
522
#endregion
523
524
保存XML文件----------------------------------------------------#region 保存XML文件----------------------------------------------------
525
/**//// <summary>
526
/// 功能:
527
/// 保存XML文件
528
/// </summary>
529
public void SaveXmlDocument()
530
{
531
try
532
{
533
//保存设置的结果
534
if (this.xmlFilePathType == enumXmlPathType.AbsolutePath)
535
{
536
Savexml(xmlFilePath);
537
}
538
else if (this.xmlFilePathType == enumXmlPathType.VirtualPath)
539
{
540
Savexml(HttpContext.Current.Server.MapPath(xmlFilePath));
541
}
542
}
543
catch (XmlException xmle)
544
{
545
throw xmle;
546
}
547
}
548
549
/**//// <summary>
550
/// 功能:
551
/// 保存XML文件
552
/// </summary>
553
public void SaveXmlDocument(string tempXMLFilePath)
554
{
555
try
556
{
557
//保存设置的结果
558
Savexml(tempXMLFilePath);
559
}
560
catch (XmlException xmle)
561
{
562
throw xmle;
563
}
564
}
565
/**//// <summary>
566
///
567
/// </summary>
568
/// <param ></param>
569
private void Savexml(string filepath)
570
{
571
xmlDoc.Save(filepath);
572
}
573
574
#endregion
575
576
}
577
578
}
579

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

225



226

227



228

229

230

231


232


233

234

235

236

237

238

239

240



241

242

243

244

245

246


247


248

249

250

251

252

253

254

255



256

257



258

259

260

261



262

263



264

265

266



267

268



269

270

271

272

273

274

275

276

277



278

279

280

281

282

283


284


285

286

287

288



289

290

291

292


293

294

295

296



297

298



299

300

301

302

303

304



305

306

307

308

309


310

311

312

313

314

315



316

317

318



319

320

321



322

323

324

325

326



327

328

329

330

331



332

333

334

335

336


337

338

339

340



341

342



343

344

345

346



347

348

349

350

351

352

353

354

355

356

357



358

359

360

361

362



363

364

365

366

367


368

369

370

371

372

373



374

375

376


377

378

379

380



381

382

383

384

385

386


387

388

389

390

391

392

393



394

395



396

397

398



399

400

401

402

403

404

405



406

407

408

409


410

411

412

413

414

415

416



417

418

419

420

421


422


423

424

425

426

427

428



429

430

431



432

433



434

435

436



437

438



439

440

441

442

443

444

445

446

447


448

449

450

451

452

453

454



455

456

457



458

459



460

461

462



463

464



465

466

467

468

469

470

471

472


473

474

475

476

477

478



479

480

481



482

483



484

485

486

487

488

489

490

491


492


493

494

495

496

497

498



499

500

501

502


503

504

505

506

507

508



509

510

511

512


513

514

515

516

517

518



519

520

521

522

523

524


525


526

527

528

529

530



531

532



533

534

535



536

537

538

539



540

541

542

543

544



545

546

547

548

549


550

551

552

553

554



555

556



557

558

559

560

561



562

563

564

565


566

567

568

569

570



571

572

573

574

575

576

577

578

579
