1
using
System;
2 using System.Xml;
3 using System.Data;
4
5 namespace Message.Common
6 {
7 /// <summary>
8 /// XML相关通用功能
9 /// </summary>
10 public class Xml
11 {
12 public Xml() {}
13
14 /// <summary>
15 /// XML资源类型
16 /// </summary>
17 public enum XmlType
18 {
19 File,
20 String
21 };
22
23 #region 读取XML资源到DataSet中
24 /// <summary>
25 /// 读取XML资源到DataSet中
26 /// </summary>
27 /// <param name="source"> XML资源,文件为路径,否则为XML字符串 </param>
28 /// <param name="xmlType"> XML资源类型 </param>
29 /// <returns> DataSet </returns>
30 public static DataSet GetDataSet( string source, XmlType xmlType)
31 {
32 DataSet ds = new DataSet();
33 if (xmlType == XmlType.File)
34 {
35 ds.ReadXml(source);
36 }
37 else
38 {
39 XmlDocument xd = new XmlDocument();
40 xd.LoadXml(source);
41 XmlNodeReader xnr = new XmlNodeReader(xd);
42 ds.ReadXml(xnr);
43 }
44
45 return ds;
46 }
47
48 #endregion
49
50 #region 获取一个字符串xml文档中的ds
51 /// <remarks>
52 /// 赵洪
53 /// </remarks>
54 /// <summary>
55 /// 获取一个字符串xml文档中的ds
56 /// </summary>
57 /// <param name="xml_string"> 含有xml信息的字符串 </param>
58 public static void get_XmlValue_ds( string xml_string, ref DataSet ds)
59 {
60
61 System.Xml.XmlDocument xd = new XmlDocument();
62 xd.LoadXml(xml_string);
63 XmlNodeReader xnr = new XmlNodeReader(xd);
64 ds.ReadXml(xnr);
65 xnr.Close();
66 int a = ds.Tables.Count;
67
68 }
69
70 #endregion
71
72 #region 读取XML资源到DataTable中
73 /// <summary>
74 /// 读取XML资源到DataTable中
75 /// </summary>
76 /// <param name="source"> XML资源,文件为路径,否则为XML字符串 </param>
77 /// <param name="xmlType"> XML资源类型:文件,字符串 </param>
78 /// <param name="tableName"> 表名称 </param>
79 /// <returns> DataTable </returns>
80 public static DataTable GetTable( string source, XmlType xmlType, string tableName)
81 {
82 DataSet ds = new DataSet();
83 if (xmlType == XmlType.File)
84 {
85 ds.ReadXml(source);
86 }
87 else
88 {
89 XmlDocument xd = new XmlDocument();
90 xd.LoadXml(source);
91 XmlNodeReader xnr = new XmlNodeReader(xd);
92 ds.ReadXml(xnr);
93 }
94
95 return ds.Tables[tableName];
96 }
97
98 #endregion
99
100 #region 读取XML资源中指定的DataTable的指定行指定列的值
101 /// <summary>
102 /// 读取XML资源中指定的DataTable的指定行指定列的值
103 /// </summary>
104 /// <param name="source"> XML资源 </param>
105 /// <param name="xmlType"> XML资源类型:文件,字符串 </param>
106 /// <param name="tableName"> 表名 </param>
107 /// <param name="rowIndex"> 行号 </param>
108 /// <param name="colName"> 列名 </param>
109 /// <returns> 值,不存在时返回Null </returns>
110 public static object GetTableCell( string source, XmlType xmlType, string tableName, int rowIndex, string colName)
111 {
112 DataSet ds = new DataSet();
113 if (xmlType == XmlType.File)
114 {
115 ds.ReadXml(source);
116 }
117 else
118 {
119 XmlDocument xd = new XmlDocument();
120 xd.LoadXml(source);
121 XmlNodeReader xnr = new XmlNodeReader(xd);
122 ds.ReadXml(xnr);
123 }
124
125 return ds.Tables[tableName].Rows[rowIndex][colName];
126 }
127
128 #endregion
129
130 #region 读取XML资源中指定的DataTable的指定行指定列的值
131 /// <summary>
132 /// 读取XML资源中指定的DataTable的指定行指定列的值
133 /// </summary>
134 /// <param name="source"> XML资源 </param>
135 /// <param name="xmlType"> XML资源类型:文件,字符串 </param>
136 /// <param name="tableName"> 表名 </param>
137 /// <param name="rowIndex"> 行号 </param>
138 /// <param name="colIndex"> 列号 </param>
139 /// <returns> 值,不存在时返回Null </returns>
140 public static object GetTableCell( string source, XmlType xmlType, string tableName, int rowIndex, int colIndex)
141 {
142 DataSet ds = new DataSet();
143 if (xmlType == XmlType.File)
144 {
145 ds.ReadXml(source);
146 }
147 else
148 {
149 XmlDocument xd = new XmlDocument();
150 xd.LoadXml(source);
151 XmlNodeReader xnr = new XmlNodeReader(xd);
152 ds.ReadXml(xnr);
153 }
154
155 return ds.Tables[tableName].Rows[rowIndex][colIndex];
156 }
157
158 #endregion
159
160 #region 获取一个字符串xml文档中的一个table,指定行,指定列的值
161 /// <summary>
162 /// 获取一个字符串xml文档中的一个table,指定行,指定列的值
163 /// </summary>
164 /// <param name="xml_string"> 含有xml信息的字符串 </param>
165 /// <param name="tablename"> 表名 </param>
166 /// <param name="row_index"> 指定行 </param>
167 /// <param name="col_name"> 指定列名 </param>
168 /// <returns> 相应节点的值 </returns>
169 public static string get_XmlValue( string xml_string, string tablename, int row_index, string col_name)
170 {
171 System.Xml.XmlDocument xd = new XmlDocument();
172 xd.LoadXml(xml_string);
173 XmlElement root = xd.DocumentElement;
174 XmlNode xe = root.CloneNode( false );
175 xe = root.SelectNodes(tablename).Item(row_index);
176 string val = "" ;
177 if ( null == xe)
178 {
179 return "" ;
180 }
181 foreach (XmlNode xn in xe.ChildNodes )
182 {
183 if (xn.LocalName == col_name)
184 {
185 val = xn.InnerText;
186 break ;
187 }
188 }
189 return val;
190 }
191
192 /// <summary>
193 /// 获取一个xml文件中的一个table,指定行,指定列的值
194 /// </summary>
195 /// <param name="xml_string"> 含有xml信息的字符串 </param>
196 /// <param name="tablename"> 表名 </param>
197 /// <param name="row_index"> 指定行 </param>
198 /// <param name="col_name"> 指定列名 </param>
199 /// <returns> 相应节点的值 </returns>
200 public static string get_XmlValue( string xml_string, string tablename, int row_index, string col_name, bool isfile)
201 {
202 System.Xml.XmlDocument xd = new XmlDocument();
203 if (isfile)
204 xd.Load(xml_string);
205 else
206 xd.LoadXml(xml_string);
207 XmlElement root = xd.DocumentElement;
208 XmlNode xe = root.CloneNode( false );
209 xe = root.SelectNodes(tablename).Item(row_index);
210 string val = "" ;
211 if ( null == xe)
212 {
213 return "" ;
214 }
215 foreach (XmlNode xn in xe.ChildNodes )
216 {
217 if (xn.LocalName == col_name)
218 {
219 val = xn.InnerText;
220 break ;
221 }
222 }
223 return val;
224 }
225
226 #endregion
227
228 #region 获取一个字符串xml文档中的dt
229 /// <remarks>
230 ///
231 /// </remarks>
232 /// <summary>
233 /// 获取一个字符串xml文档中的dt
234 /// </summary>
235 /// <param name="xml_string"> 含有xml信息的字符串 </param>
236 public static void get_XmlValue_dt( string xml_string, ref DataTable dt, string table_name)
237 {
238 DataSet ds = new DataSet();
239 System.Xml.XmlDocument xd = new XmlDocument();
240 xd.LoadXml(xml_string);
241 // System.IO.FileStream fs = new System.IO.FileStream("c:\\aa.xml",System.IO.FileMode.Open);
242
243 // xd.Save(fs);
244 // System.Xml.XmlReader xr=(System.Xml.XmlReader)((object)sr);
245 // ds=new DataSet();
246 XmlNodeReader xnr = new XmlNodeReader(xd);
247 ds.ReadXml(xnr);
248 xnr.Close();
249 dt = ds.Tables[table_name];
250 }
251 #endregion
252
253 #region 将DataTable写入XML文件中
254 /// <summary>
255 /// 将DataTable写入XML文件中
256 /// </summary>
257 /// <param name="dt"> 含有数据的DataTable </param>
258 /// <param name="filePath"> 文件路径 </param>
259 public static void SaveTableToFile(DataTable dt, string filePath)
260 {
261 DataSet ds = new DataSet( " Config " );
262 ds.Tables.Add(dt.Copy());
263
264 ds.WriteXml(filePath);
265 }
266 #endregion
267
268 #region 将DataTable以指定的根结点名称写入文件
269 /// <summary>
270 /// 将DataTable以指定的根结点名称写入文件
271 /// </summary>
272 /// <param name="dt"> 含有数据的DataTable </param>
273 /// <param name="rootName"> 根结点名称 </param>
274 /// <param name="filePath"> 文件路径 </param>
275 public static void SaveTableToFile(DataTable dt, string rootName, string filePath)
276 {
277 DataSet ds = new DataSet(rootName);
278 ds.Tables.Add(dt.Copy());
279
280 ds.WriteXml(filePath);
281 }
282 #endregion
283
284 #region 使用DataSet方式更新XML文件节点
285
286 /// <summary>
287 /// 使用DataSet方式更新XML文件节点
288 /// </summary>
289 /// <param name="filePath"> XML文件路径 </param>
290 /// <param name="tableName"> 表名称 </param>
291 /// <param name="rowIndex"> 行号 </param>
292 /// <param name="colName"> 列名 </param>
293 /// <param name="content"> 更新值 </param>
294 /// <returns> 更新是否成功 </returns>
295 public static bool UpdateTableCell( string filePath, string tableName, int rowIndex, string colName, string content)
296 {
297 bool flag = false ;
298
299 DataSet ds = new DataSet();
300 ds.ReadXml(filePath);
301 DataTable dt = ds.Tables[tableName];
302
303 if (dt.Rows[rowIndex][colName] != null )
304 {
305 dt.Rows[rowIndex][colName] = content;
306 ds.WriteXml(filePath);
307 flag = true ;
308 }
309 else
310 {
311 flag = false ;
312 }
313
314 return flag;
315 }
316
317 #endregion
318
319 #region 使用DataSet方式更新XML文件节点
320 /// <summary>
321 /// 使用DataSet方式更新XML文件节点
322 /// </summary>
323 /// <param name="filePath"> XML文件路径 </param>
324 /// <param name="tableName"> 表名称 </param>
325 /// <param name="rowIndex"> 行号 </param>
326 /// <param name="colIndex"> 列号 </param>
327 /// <param name="content"> 更新值 </param>
328 /// <returns> 更新是否成功 </returns>
329 public static bool UpdateTableCell( string filePath, string tableName, int rowIndex, int colIndex, string content)
330 {
331 bool flag = false ;
332
333 DataSet ds = new DataSet();
334 ds.ReadXml(filePath);
335 DataTable dt = ds.Tables[tableName];
336
337 if (dt.Rows[rowIndex][colIndex] != null )
338 {
339 dt.Rows[rowIndex][colIndex] = content;
340 ds.WriteXml(filePath);
341 flag = true ;
342 }
343 else
344 {
345 flag = false ;
346 }
347
348 return flag;
349 }
350 #endregion
351
352 #region 读取XML资源中的指定节点内容
353
354 /// <summary>
355 /// 读取XML资源中的指定节点内容
356 /// </summary>
357 /// <param name="source"> XML资源 </param>
358 /// <param name="xmlType"> XML资源类型:文件,字符串 </param>
359 /// <param name="nodeName"> 节点名称 </param>
360 /// <returns> 节点内容 </returns>
361 public static object GetNodeValue( string source, XmlType xmlType, string nodeName)
362 {
363 XmlDocument xd = new XmlDocument();
364 if (xmlType == XmlType.File)
365 {
366 xd.Load(source);
367 }
368 else
369 {
370 xd.LoadXml(source);
371 }
372 XmlElement xe = xd.DocumentElement;
373 XmlNode xn = xe.SelectSingleNode( " // " + nodeName);
374 if (xn != null )
375 {
376 return xn.InnerText;
377 }
378 else
379 {
380 return null ;
381 }
382 }
383 /// <summary>
384 /// 读取XML资源中的指定节点内容
385 /// </summary>
386 /// <param name="source"> XML资源 </param>
387 /// <param name="nodeName"> 节点名称 </param>
388 /// <returns> 节点内容 </returns>
389 public static object GetNodeValue( string source, string nodeName)
390 {
391 if (source == null || nodeName == null || source == "" || nodeName == "" || source.Length < nodeName.Length * 2 )
392 {
393 return null ;
394 }
395 else
396 {
397 int start = source.IndexOf( " < " + nodeName + " > " ) + nodeName.Length + 2 ;
398 int end = source.IndexOf( " </ " + nodeName + " > " );
399 if (start == - 1 || end == - 1 )
400 {
401 return null ;
402 }
403 else if (start >= end)
404 {
405 return null ;
406 }
407 else
408 {
409 return source.Substring(start,end - start);
410 }
411 }
412 }
413
414
415 #endregion
416
417 #region 更新XML文件中的指定节点内容
418 /// <summary>
419 /// 更新XML文件中的指定节点内容
420 /// </summary>
421 /// <param name="filePath"> 文件路径 </param>
422 /// <param name="nodeName"> 节点名称 </param>
423 /// <param name="nodeValue"> 更新内容 </param>
424 /// <returns> 更新是否成功 </returns>
425 public static bool UpdateNode( string filePath, string nodeName, string nodeValue)
426 {
427 bool flag = false ;
428
429 XmlDocument xd = new XmlDocument();
430 xd.Load(filePath);
431 XmlElement xe = xd.DocumentElement;
432 XmlNode xn = xe.SelectSingleNode( " // " + nodeName);
433 if (xn != null )
434 {
435 xn.InnerText = nodeValue;
436 flag = true ;
437 }
438 else
439 {
440 flag = false ;
441 }
442
443 return flag;
444 }
445 #endregion
446
447 #region 操作xml文件中指定节点的数据
448 /// <summary>
449 /// 获得xml文件中指定节点的节点数据
450 /// </summary>
451 /// <param name="TableName"></param>
452 /// <returns></returns>
453 public static string GetNodeInfoByNodeName( string path, string nodeName)
454 {
455 string XmlString = "" ;
456 XmlDocument xml = new XmlDocument();
457 xml.Load(path);
458 System.Xml.XmlElement root = xml.DocumentElement;
459 System.Xml.XmlNode node = root.SelectSingleNode( " // " + nodeName);
460 if (node != null )
461 {
462 XmlString = node.InnerText;
463 }
464 return XmlString;
465 }
466 #endregion
467
468 /// <summary>
469 /// 根据xml路径获取DataSet。如果Table名为空:flag=false 返回所有xml的数据;flag=true 将xml中的table名作为数据项返回。否则根据table名获取相应的table信息返回。
470 /// </summary>
471 /// <param name="XmlPath"> xml文件路径 </param>
472 /// <param name="TableName"> 所要获取的Table名,可为空 </param>
473 /// <param name="flag"> 若为true,则只将所有表名作为数据项返回;若为false,则返回所要获取的Table的所有数据 </param>
474 /// <returns> 返回所获取的DataSet </returns>
475 /// <summary>
476 /// 根据xml路径获取DataSet。如果Table名为空:flag=false 返回所有xml的数据;flag=true 将xml中的table名作为数据项返回。否则根据table名获取相应的table信息返回。
477 /// </summary>
478 /// <param name="XmlPath"> xml文件路径 </param>
479 /// <param name="TableName"> 所要获取的Table名,可为空 </param>
480 /// <param name="flag"> 若为true,则只将所有表名作为数据项返回;若为false,则返回所要获取的Table的所有数据 </param>
481 /// <returns> 返回所获取的DataSet </returns>
482 public static DataSet GetTableByXml( string XmlPath, string TableName, bool flag)
483 {
484 DataSet ds = new DataSet();
485 if (TableName == "" )
486 {
487 DataSet ds1 = new DataSet();
488 ds1.ReadXml(XmlPath);
489 if (ds1.Tables.Count > 0 )
490 {
491 if (flag)
492 {
493 DataTable dt = new DataTable( " typeTable " );
494 dt.Columns.Add( " TableName " , typeof ( string ));
495 ds.Tables.Add(dt);
496 for ( int i = 0 ;i < ds1.Tables.Count;i ++ )
497 {
498 DataRow dr = dt.NewRow();
499 dr[ " TableName " ] = ds1.Tables[i].TableName;
500 ds.Tables[ " typeTable " ].Rows.Add(dr);
501 }
502 }
503 else
504 {
505 ds = ds1.Copy();
506 }
507 }
508 }
509 else
510 {
511 DataSet ds2 = new DataSet();
512 ds2.ReadXml(XmlPath);
513 if (ds2.Tables[TableName] != null )
514 {
515 ds.Tables.Add(ds2.Tables[TableName].Copy());
516 }
517 }
518 return ds;
519 }
520 /// <summary>
521 /// escape invalid Unicode in XML
522 /// </summary>
523 /// <param name="str"></param>
524 /// <returns></returns>
525 public static string Replaceinvalid( string str)
526 {
527 System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex( " [\x00-\x08|\x0b-\x0c|\x0e-\x1f] " );
528 return r.Replace(str, " " );
529 }
530
531 /// <summary>
532 /// 获得接口错误信息
533 /// </summary>
534 /// <param name="errCode"> 错误编码 </param>
535 /// <returns></returns>
536 public static string GetInterfaceErrorString( string errCode)
537 {
538 System.Text.StringBuilder sb = new System.Text.StringBuilder();
539 sb.Append( " <?xml version=\ " 1.0 \ " encoding=\ " GB2312\ " ?> " );
540 sb.Append( " <Root> " );
541 sb.Append( " <Result><return_result> " + errCode + " </return_result></Result> " );
542 sb.Append( " </Root> " );
543
544 return sb.ToString();
545 }
546 }
547 }
2 using System.Xml;
3 using System.Data;
4
5 namespace Message.Common
6 {
7 /// <summary>
8 /// XML相关通用功能
9 /// </summary>
10 public class Xml
11 {
12 public Xml() {}
13
14 /// <summary>
15 /// XML资源类型
16 /// </summary>
17 public enum XmlType
18 {
19 File,
20 String
21 };
22
23 #region 读取XML资源到DataSet中
24 /// <summary>
25 /// 读取XML资源到DataSet中
26 /// </summary>
27 /// <param name="source"> XML资源,文件为路径,否则为XML字符串 </param>
28 /// <param name="xmlType"> XML资源类型 </param>
29 /// <returns> DataSet </returns>
30 public static DataSet GetDataSet( string source, XmlType xmlType)
31 {
32 DataSet ds = new DataSet();
33 if (xmlType == XmlType.File)
34 {
35 ds.ReadXml(source);
36 }
37 else
38 {
39 XmlDocument xd = new XmlDocument();
40 xd.LoadXml(source);
41 XmlNodeReader xnr = new XmlNodeReader(xd);
42 ds.ReadXml(xnr);
43 }
44
45 return ds;
46 }
47
48 #endregion
49
50 #region 获取一个字符串xml文档中的ds
51 /// <remarks>
52 /// 赵洪
53 /// </remarks>
54 /// <summary>
55 /// 获取一个字符串xml文档中的ds
56 /// </summary>
57 /// <param name="xml_string"> 含有xml信息的字符串 </param>
58 public static void get_XmlValue_ds( string xml_string, ref DataSet ds)
59 {
60
61 System.Xml.XmlDocument xd = new XmlDocument();
62 xd.LoadXml(xml_string);
63 XmlNodeReader xnr = new XmlNodeReader(xd);
64 ds.ReadXml(xnr);
65 xnr.Close();
66 int a = ds.Tables.Count;
67
68 }
69
70 #endregion
71
72 #region 读取XML资源到DataTable中
73 /// <summary>
74 /// 读取XML资源到DataTable中
75 /// </summary>
76 /// <param name="source"> XML资源,文件为路径,否则为XML字符串 </param>
77 /// <param name="xmlType"> XML资源类型:文件,字符串 </param>
78 /// <param name="tableName"> 表名称 </param>
79 /// <returns> DataTable </returns>
80 public static DataTable GetTable( string source, XmlType xmlType, string tableName)
81 {
82 DataSet ds = new DataSet();
83 if (xmlType == XmlType.File)
84 {
85 ds.ReadXml(source);
86 }
87 else
88 {
89 XmlDocument xd = new XmlDocument();
90 xd.LoadXml(source);
91 XmlNodeReader xnr = new XmlNodeReader(xd);
92 ds.ReadXml(xnr);
93 }
94
95 return ds.Tables[tableName];
96 }
97
98 #endregion
99
100 #region 读取XML资源中指定的DataTable的指定行指定列的值
101 /// <summary>
102 /// 读取XML资源中指定的DataTable的指定行指定列的值
103 /// </summary>
104 /// <param name="source"> XML资源 </param>
105 /// <param name="xmlType"> XML资源类型:文件,字符串 </param>
106 /// <param name="tableName"> 表名 </param>
107 /// <param name="rowIndex"> 行号 </param>
108 /// <param name="colName"> 列名 </param>
109 /// <returns> 值,不存在时返回Null </returns>
110 public static object GetTableCell( string source, XmlType xmlType, string tableName, int rowIndex, string colName)
111 {
112 DataSet ds = new DataSet();
113 if (xmlType == XmlType.File)
114 {
115 ds.ReadXml(source);
116 }
117 else
118 {
119 XmlDocument xd = new XmlDocument();
120 xd.LoadXml(source);
121 XmlNodeReader xnr = new XmlNodeReader(xd);
122 ds.ReadXml(xnr);
123 }
124
125 return ds.Tables[tableName].Rows[rowIndex][colName];
126 }
127
128 #endregion
129
130 #region 读取XML资源中指定的DataTable的指定行指定列的值
131 /// <summary>
132 /// 读取XML资源中指定的DataTable的指定行指定列的值
133 /// </summary>
134 /// <param name="source"> XML资源 </param>
135 /// <param name="xmlType"> XML资源类型:文件,字符串 </param>
136 /// <param name="tableName"> 表名 </param>
137 /// <param name="rowIndex"> 行号 </param>
138 /// <param name="colIndex"> 列号 </param>
139 /// <returns> 值,不存在时返回Null </returns>
140 public static object GetTableCell( string source, XmlType xmlType, string tableName, int rowIndex, int colIndex)
141 {
142 DataSet ds = new DataSet();
143 if (xmlType == XmlType.File)
144 {
145 ds.ReadXml(source);
146 }
147 else
148 {
149 XmlDocument xd = new XmlDocument();
150 xd.LoadXml(source);
151 XmlNodeReader xnr = new XmlNodeReader(xd);
152 ds.ReadXml(xnr);
153 }
154
155 return ds.Tables[tableName].Rows[rowIndex][colIndex];
156 }
157
158 #endregion
159
160 #region 获取一个字符串xml文档中的一个table,指定行,指定列的值
161 /// <summary>
162 /// 获取一个字符串xml文档中的一个table,指定行,指定列的值
163 /// </summary>
164 /// <param name="xml_string"> 含有xml信息的字符串 </param>
165 /// <param name="tablename"> 表名 </param>
166 /// <param name="row_index"> 指定行 </param>
167 /// <param name="col_name"> 指定列名 </param>
168 /// <returns> 相应节点的值 </returns>
169 public static string get_XmlValue( string xml_string, string tablename, int row_index, string col_name)
170 {
171 System.Xml.XmlDocument xd = new XmlDocument();
172 xd.LoadXml(xml_string);
173 XmlElement root = xd.DocumentElement;
174 XmlNode xe = root.CloneNode( false );
175 xe = root.SelectNodes(tablename).Item(row_index);
176 string val = "" ;
177 if ( null == xe)
178 {
179 return "" ;
180 }
181 foreach (XmlNode xn in xe.ChildNodes )
182 {
183 if (xn.LocalName == col_name)
184 {
185 val = xn.InnerText;
186 break ;
187 }
188 }
189 return val;
190 }
191
192 /// <summary>
193 /// 获取一个xml文件中的一个table,指定行,指定列的值
194 /// </summary>
195 /// <param name="xml_string"> 含有xml信息的字符串 </param>
196 /// <param name="tablename"> 表名 </param>
197 /// <param name="row_index"> 指定行 </param>
198 /// <param name="col_name"> 指定列名 </param>
199 /// <returns> 相应节点的值 </returns>
200 public static string get_XmlValue( string xml_string, string tablename, int row_index, string col_name, bool isfile)
201 {
202 System.Xml.XmlDocument xd = new XmlDocument();
203 if (isfile)
204 xd.Load(xml_string);
205 else
206 xd.LoadXml(xml_string);
207 XmlElement root = xd.DocumentElement;
208 XmlNode xe = root.CloneNode( false );
209 xe = root.SelectNodes(tablename).Item(row_index);
210 string val = "" ;
211 if ( null == xe)
212 {
213 return "" ;
214 }
215 foreach (XmlNode xn in xe.ChildNodes )
216 {
217 if (xn.LocalName == col_name)
218 {
219 val = xn.InnerText;
220 break ;
221 }
222 }
223 return val;
224 }
225
226 #endregion
227
228 #region 获取一个字符串xml文档中的dt
229 /// <remarks>
230 ///
231 /// </remarks>
232 /// <summary>
233 /// 获取一个字符串xml文档中的dt
234 /// </summary>
235 /// <param name="xml_string"> 含有xml信息的字符串 </param>
236 public static void get_XmlValue_dt( string xml_string, ref DataTable dt, string table_name)
237 {
238 DataSet ds = new DataSet();
239 System.Xml.XmlDocument xd = new XmlDocument();
240 xd.LoadXml(xml_string);
241 // System.IO.FileStream fs = new System.IO.FileStream("c:\\aa.xml",System.IO.FileMode.Open);
242
243 // xd.Save(fs);
244 // System.Xml.XmlReader xr=(System.Xml.XmlReader)((object)sr);
245 // ds=new DataSet();
246 XmlNodeReader xnr = new XmlNodeReader(xd);
247 ds.ReadXml(xnr);
248 xnr.Close();
249 dt = ds.Tables[table_name];
250 }
251 #endregion
252
253 #region 将DataTable写入XML文件中
254 /// <summary>
255 /// 将DataTable写入XML文件中
256 /// </summary>
257 /// <param name="dt"> 含有数据的DataTable </param>
258 /// <param name="filePath"> 文件路径 </param>
259 public static void SaveTableToFile(DataTable dt, string filePath)
260 {
261 DataSet ds = new DataSet( " Config " );
262 ds.Tables.Add(dt.Copy());
263
264 ds.WriteXml(filePath);
265 }
266 #endregion
267
268 #region 将DataTable以指定的根结点名称写入文件
269 /// <summary>
270 /// 将DataTable以指定的根结点名称写入文件
271 /// </summary>
272 /// <param name="dt"> 含有数据的DataTable </param>
273 /// <param name="rootName"> 根结点名称 </param>
274 /// <param name="filePath"> 文件路径 </param>
275 public static void SaveTableToFile(DataTable dt, string rootName, string filePath)
276 {
277 DataSet ds = new DataSet(rootName);
278 ds.Tables.Add(dt.Copy());
279
280 ds.WriteXml(filePath);
281 }
282 #endregion
283
284 #region 使用DataSet方式更新XML文件节点
285
286 /// <summary>
287 /// 使用DataSet方式更新XML文件节点
288 /// </summary>
289 /// <param name="filePath"> XML文件路径 </param>
290 /// <param name="tableName"> 表名称 </param>
291 /// <param name="rowIndex"> 行号 </param>
292 /// <param name="colName"> 列名 </param>
293 /// <param name="content"> 更新值 </param>
294 /// <returns> 更新是否成功 </returns>
295 public static bool UpdateTableCell( string filePath, string tableName, int rowIndex, string colName, string content)
296 {
297 bool flag = false ;
298
299 DataSet ds = new DataSet();
300 ds.ReadXml(filePath);
301 DataTable dt = ds.Tables[tableName];
302
303 if (dt.Rows[rowIndex][colName] != null )
304 {
305 dt.Rows[rowIndex][colName] = content;
306 ds.WriteXml(filePath);
307 flag = true ;
308 }
309 else
310 {
311 flag = false ;
312 }
313
314 return flag;
315 }
316
317 #endregion
318
319 #region 使用DataSet方式更新XML文件节点
320 /// <summary>
321 /// 使用DataSet方式更新XML文件节点
322 /// </summary>
323 /// <param name="filePath"> XML文件路径 </param>
324 /// <param name="tableName"> 表名称 </param>
325 /// <param name="rowIndex"> 行号 </param>
326 /// <param name="colIndex"> 列号 </param>
327 /// <param name="content"> 更新值 </param>
328 /// <returns> 更新是否成功 </returns>
329 public static bool UpdateTableCell( string filePath, string tableName, int rowIndex, int colIndex, string content)
330 {
331 bool flag = false ;
332
333 DataSet ds = new DataSet();
334 ds.ReadXml(filePath);
335 DataTable dt = ds.Tables[tableName];
336
337 if (dt.Rows[rowIndex][colIndex] != null )
338 {
339 dt.Rows[rowIndex][colIndex] = content;
340 ds.WriteXml(filePath);
341 flag = true ;
342 }
343 else
344 {
345 flag = false ;
346 }
347
348 return flag;
349 }
350 #endregion
351
352 #region 读取XML资源中的指定节点内容
353
354 /// <summary>
355 /// 读取XML资源中的指定节点内容
356 /// </summary>
357 /// <param name="source"> XML资源 </param>
358 /// <param name="xmlType"> XML资源类型:文件,字符串 </param>
359 /// <param name="nodeName"> 节点名称 </param>
360 /// <returns> 节点内容 </returns>
361 public static object GetNodeValue( string source, XmlType xmlType, string nodeName)
362 {
363 XmlDocument xd = new XmlDocument();
364 if (xmlType == XmlType.File)
365 {
366 xd.Load(source);
367 }
368 else
369 {
370 xd.LoadXml(source);
371 }
372 XmlElement xe = xd.DocumentElement;
373 XmlNode xn = xe.SelectSingleNode( " // " + nodeName);
374 if (xn != null )
375 {
376 return xn.InnerText;
377 }
378 else
379 {
380 return null ;
381 }
382 }
383 /// <summary>
384 /// 读取XML资源中的指定节点内容
385 /// </summary>
386 /// <param name="source"> XML资源 </param>
387 /// <param name="nodeName"> 节点名称 </param>
388 /// <returns> 节点内容 </returns>
389 public static object GetNodeValue( string source, string nodeName)
390 {
391 if (source == null || nodeName == null || source == "" || nodeName == "" || source.Length < nodeName.Length * 2 )
392 {
393 return null ;
394 }
395 else
396 {
397 int start = source.IndexOf( " < " + nodeName + " > " ) + nodeName.Length + 2 ;
398 int end = source.IndexOf( " </ " + nodeName + " > " );
399 if (start == - 1 || end == - 1 )
400 {
401 return null ;
402 }
403 else if (start >= end)
404 {
405 return null ;
406 }
407 else
408 {
409 return source.Substring(start,end - start);
410 }
411 }
412 }
413
414
415 #endregion
416
417 #region 更新XML文件中的指定节点内容
418 /// <summary>
419 /// 更新XML文件中的指定节点内容
420 /// </summary>
421 /// <param name="filePath"> 文件路径 </param>
422 /// <param name="nodeName"> 节点名称 </param>
423 /// <param name="nodeValue"> 更新内容 </param>
424 /// <returns> 更新是否成功 </returns>
425 public static bool UpdateNode( string filePath, string nodeName, string nodeValue)
426 {
427 bool flag = false ;
428
429 XmlDocument xd = new XmlDocument();
430 xd.Load(filePath);
431 XmlElement xe = xd.DocumentElement;
432 XmlNode xn = xe.SelectSingleNode( " // " + nodeName);
433 if (xn != null )
434 {
435 xn.InnerText = nodeValue;
436 flag = true ;
437 }
438 else
439 {
440 flag = false ;
441 }
442
443 return flag;
444 }
445 #endregion
446
447 #region 操作xml文件中指定节点的数据
448 /// <summary>
449 /// 获得xml文件中指定节点的节点数据
450 /// </summary>
451 /// <param name="TableName"></param>
452 /// <returns></returns>
453 public static string GetNodeInfoByNodeName( string path, string nodeName)
454 {
455 string XmlString = "" ;
456 XmlDocument xml = new XmlDocument();
457 xml.Load(path);
458 System.Xml.XmlElement root = xml.DocumentElement;
459 System.Xml.XmlNode node = root.SelectSingleNode( " // " + nodeName);
460 if (node != null )
461 {
462 XmlString = node.InnerText;
463 }
464 return XmlString;
465 }
466 #endregion
467
468 /// <summary>
469 /// 根据xml路径获取DataSet。如果Table名为空:flag=false 返回所有xml的数据;flag=true 将xml中的table名作为数据项返回。否则根据table名获取相应的table信息返回。
470 /// </summary>
471 /// <param name="XmlPath"> xml文件路径 </param>
472 /// <param name="TableName"> 所要获取的Table名,可为空 </param>
473 /// <param name="flag"> 若为true,则只将所有表名作为数据项返回;若为false,则返回所要获取的Table的所有数据 </param>
474 /// <returns> 返回所获取的DataSet </returns>
475 /// <summary>
476 /// 根据xml路径获取DataSet。如果Table名为空:flag=false 返回所有xml的数据;flag=true 将xml中的table名作为数据项返回。否则根据table名获取相应的table信息返回。
477 /// </summary>
478 /// <param name="XmlPath"> xml文件路径 </param>
479 /// <param name="TableName"> 所要获取的Table名,可为空 </param>
480 /// <param name="flag"> 若为true,则只将所有表名作为数据项返回;若为false,则返回所要获取的Table的所有数据 </param>
481 /// <returns> 返回所获取的DataSet </returns>
482 public static DataSet GetTableByXml( string XmlPath, string TableName, bool flag)
483 {
484 DataSet ds = new DataSet();
485 if (TableName == "" )
486 {
487 DataSet ds1 = new DataSet();
488 ds1.ReadXml(XmlPath);
489 if (ds1.Tables.Count > 0 )
490 {
491 if (flag)
492 {
493 DataTable dt = new DataTable( " typeTable " );
494 dt.Columns.Add( " TableName " , typeof ( string ));
495 ds.Tables.Add(dt);
496 for ( int i = 0 ;i < ds1.Tables.Count;i ++ )
497 {
498 DataRow dr = dt.NewRow();
499 dr[ " TableName " ] = ds1.Tables[i].TableName;
500 ds.Tables[ " typeTable " ].Rows.Add(dr);
501 }
502 }
503 else
504 {
505 ds = ds1.Copy();
506 }
507 }
508 }
509 else
510 {
511 DataSet ds2 = new DataSet();
512 ds2.ReadXml(XmlPath);
513 if (ds2.Tables[TableName] != null )
514 {
515 ds.Tables.Add(ds2.Tables[TableName].Copy());
516 }
517 }
518 return ds;
519 }
520 /// <summary>
521 /// escape invalid Unicode in XML
522 /// </summary>
523 /// <param name="str"></param>
524 /// <returns></returns>
525 public static string Replaceinvalid( string str)
526 {
527 System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex( " [\x00-\x08|\x0b-\x0c|\x0e-\x1f] " );
528 return r.Replace(str, " " );
529 }
530
531 /// <summary>
532 /// 获得接口错误信息
533 /// </summary>
534 /// <param name="errCode"> 错误编码 </param>
535 /// <returns></returns>
536 public static string GetInterfaceErrorString( string errCode)
537 {
538 System.Text.StringBuilder sb = new System.Text.StringBuilder();
539 sb.Append( " <?xml version=\ " 1.0 \ " encoding=\ " GB2312\ " ?> " );
540 sb.Append( " <Root> " );
541 sb.Append( " <Result><return_result> " + errCode + " </return_result></Result> " );
542 sb.Append( " </Root> " );
543
544 return sb.ToString();
545 }
546 }
547 }