详解C#操作XML的方法总结

本文的主要模块为:

1.生成xml文件

2.遍历xml文件的节点信息

3.修改xml文件的节点信息

4.向xml文件添加节点信息

5.删除指定xml文件的节点信息

假设我们需要设计出这样的一个xml文件来存储相应的信息,如下所示:

1

2

3

4

5

6

7

8

9

10

<Computers>

  <Computer ID="11111111" Description="Made in China">

    <name>Lenovo</name>

    <price>5000</price>

  </Computer>

  <Computer ID="2222222" Description="Made in USA">

    <name>IBM</name>

    <price>10000</price>

  </Computer>

</Computers>

那么如何生成这个xml文件?又怎么读取这个xml文件的节点信息,以及如何对这个xml文件的节点信息作相应的操作?请看如下代码示例:

【注:因为我们要使用xml相关的语法和方法,所以一定要引入命名空间 System.Xml】

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

  using System;

   using System.Collections.Generic;

   using System.Linq;

   using System.Text;

   using System.Xml;

   namespace OperateXML

  {

      class Program

    {

        static void Main(string[] args)

        {

            try

            {

                //xml文件存储路径

                string myXMLFilePath = "E:\\MyComputers.xml";

                //生成xml文件

                GenerateXMLFile(myXMLFilePath);

                //遍历xml文件的信息

                GetXMLInformation(myXMLFilePath);

                //修改xml文件的信息

                ModifyXmlInformation(myXMLFilePath);

                //向xml文件添加节点信息

                AddXmlInformation(myXMLFilePath);

                //删除指定节点信息

                DeleteXmlInformation(myXMLFilePath);

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.ToString());

            }

        }

        private static void GenerateXMLFile(string xmlFilePath)

        {

            try

            {

                //初始化一个xml实例

                XmlDocument myXmlDoc = new XmlDocument();

                //创建xml的根节点

                XmlElement rootElement = myXmlDoc.CreateElement("Computers");

                //将根节点加入到xml文件中(AppendChild)

                myXmlDoc.AppendChild(rootElement);

                //初始化第一层的第一个子节点

                XmlElement firstLevelElement1 = myXmlDoc.CreateElement("Computer");

                //填充第一层的第一个子节点的属性值(SetAttribute)

                firstLevelElement1.SetAttribute("ID", "11111111");

                firstLevelElement1.SetAttribute("Description", "Made in China");

                //将第一层的第一个子节点加入到根节点下

                rootElement.AppendChild(firstLevelElement1);

                //初始化第二层的第一个子节点

                XmlElement secondLevelElement11 = myXmlDoc.CreateElement("name");

                //填充第二层的第一个子节点的值(InnerText)

                secondLevelElement11.InnerText = "Lenovo";

                firstLevelElement1.AppendChild(secondLevelElement11);

                XmlElement secondLevelElement12 = myXmlDoc.CreateElement("price");

                secondLevelElement12.InnerText = "5000";

                firstLevelElement1.AppendChild(secondLevelElement12);

                XmlElement firstLevelElement2 = myXmlDoc.CreateElement("Computer");

                firstLevelElement2.SetAttribute("ID", "2222222");

                firstLevelElement2.SetAttribute("Description", "Made in USA");

                rootElement.AppendChild(firstLevelElement2);

                XmlElement secondLevelElement21 = myXmlDoc.CreateElement("name");

                secondLevelElement21.InnerText = "IBM";

                firstLevelElement2.AppendChild(secondLevelElement21);

                XmlElement secondLevelElement22 = myXmlDoc.CreateElement("price");

                secondLevelElement22.InnerText = "10000";

                firstLevelElement2.AppendChild(secondLevelElement22);

                //将xml文件保存到指定的路径下

                myXmlDoc.Save(xmlFilePath);

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.ToString());

            }

        }

        private static void GetXMLInformation(string xmlFilePath)

        {

            try

            {

                //初始化一个xml实例

                XmlDocument myXmlDoc = new XmlDocument();

                //加载xml文件(参数为xml文件的路径)

                myXmlDoc.Load(xmlFilePath);

                //获得第一个姓名匹配的节点(SelectSingleNode):此xml文件的根节点

                XmlNode rootNode = myXmlDoc.SelectSingleNode("Computers");

                //分别获得该节点的InnerXml和OuterXml信息

                string innerXmlInfo = rootNode.InnerXml.ToString();

                string outerXmlInfo = rootNode.OuterXml.ToString();

                //获得该节点的子节点(即:该节点的第一层子节点)

                XmlNodeList firstLevelNodeList = rootNode.ChildNodes;

                foreach (XmlNode node in firstLevelNodeList)

                {

                    //获得该节点的属性集合

                    XmlAttributeCollection attributeCol = node.Attributes;

                    foreach (XmlAttribute attri in attributeCol)

                    {

                        //获取属性名称与属性值

                        string name = attri.Name;

                        string value = attri.Value;

                        Console.WriteLine("{0} = {1}", name, value);

                    }

                    //判断此节点是否还有子节点

                    if (node.HasChildNodes)

                    {

                        //获取该节点的第一个子节点

                        XmlNode secondLevelNode1 = node.FirstChild;

                        //获取该节点的名字

                        string name = secondLevelNode1.Name;

                        //获取该节点的值(即:InnerText)

                        string innerText = secondLevelNode1.InnerText;

                        Console.WriteLine("{0} = {1}", name, innerText);

                        //获取该节点的第二个子节点(用数组下标获取)

                        XmlNode secondLevelNode2 = node.ChildNodes[1];

                        name = secondLevelNode2.Name;

                        innerText = secondLevelNode2.InnerText;

                        Console.WriteLine("{0} = {1}", name, innerText);

                    }

                }

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.ToString());

            }

        }

        private static void ModifyXmlInformation(string xmlFilePath)

        {

            try

            {

                XmlDocument myXmlDoc = new XmlDocument();

                myXmlDoc.Load(xmlFilePath);

                XmlNode rootNode = myXmlDoc.FirstChild;

                XmlNodeList firstLevelNodeList = rootNode.ChildNodes;

                foreach (XmlNode node in firstLevelNodeList)

                {

                    //修改此节点的属性值

                    if (node.Attributes["Description"].Value.Equals("Made in USA"))

                    {

                        node.Attributes["Description"].Value = "Made in HongKong";

                    }

                }

                //要想使对xml文件所做的修改生效,必须执行以下Save方法

                myXmlDoc.Save(xmlFilePath);

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.ToString());

            }

        }

        private static void AddXmlInformation(string xmlFilePath)

        {

            try

            {

                XmlDocument myXmlDoc = new XmlDocument();

                myXmlDoc.Load(xmlFilePath);

                //添加一个带有属性的节点信息

                foreach (XmlNode node in myXmlDoc.FirstChild.ChildNodes)

                {

                    XmlElement newElement = myXmlDoc.CreateElement("color");

                    newElement.InnerText = "black";

                    newElement.SetAttribute("IsMixed", "Yes");

                    node.AppendChild(newElement);

                }

                //保存更改

                myXmlDoc.Save(xmlFilePath);

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.ToString());

            }

        }

        private static void DeleteXmlInformation(string xmlFilePath)

        {

            try

            {

                XmlDocument myXmlDoc = new XmlDocument();

                myXmlDoc.Load(xmlFilePath);

                foreach (XmlNode node in myXmlDoc.FirstChild.ChildNodes)

                {

                    //记录该节点下的最后一个子节点(简称:最后子节点)

                    XmlNode lastNode = node.LastChild;

                    //删除最后子节点下的左右子节点

                    lastNode.RemoveAll();

                    //删除最后子节点

                    node.RemoveChild(lastNode);

                }

                //保存对xml文件所做的修改

                myXmlDoc.Save(xmlFilePath);

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.ToString());

            }

        }

    }

}

上面的这个例子,首先是通过GenerateXMLFile方法在E盘创建出了我们预想的xml文件;然后通过GetXMLInformation方法对刚刚生成的xml文件进行了信息的读取;

之后通过ModifyXmlInformation方法对xml文件信息作出相应的修改(<Computer ID="2222222" Description="Made in USA">

修改成为<Computer ID="2222222" Description="Made in HongKong">);再之后通过AddXmlInformation方法向xml文件中添加了一个带有属性值的color节点;

最后通过DeleteXmlInformation方法将刚刚添加上的color节点删除掉。至此完成了对xml文件的基本操作:创建、读取、修改、添加、删除。

【注1:想要将对xml文件所做的任何修改生效的话,必须调用Save方法,否则我们所做的修改不会保存】

【注2:我们在创建节点的时候用的是XmlElement,但是读取节点信息的时候却用的是XmlNode,这里强调一点:XmlElement是XmlNode的继承,可以调用更多的方法实现相应所需的功能】

最后简单集中的总结一下对xml进行操作的基本方法,如下所示:

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

 //所需要添加的命名空间

using System.Xml;

//初始化一个xml实例

XmlDocument xml=new XmlDocument();

//导入指定xml文件

xml.Load(“xml文件路径path”);

//指定一个节点

XmlNode root=xml.SelectSingleNode("节点名称");

//获取节点下所有直接子节点

XmlNodeList childlist=root.ChildNodes;

//判断该节点下是否有子节点

root.HasChildNodes;

//获取同名同级节点集合

XmlNodeList nodelist=xml.SelectNodes("节点名称");

//生成一个新节点

XmlElement node=xml.CreateElement("节点名称");

//将节点加到指定节点下,作为其子节点

root.AppendChild(node);

//将节点加到指定节点下某个子节点前

root.InsertBefore(node,root.ChildeNodes[i]);

//为指定节点的新建属性并赋值

node.SetAttribute("id","11111");

//为指定节点添加子节点

root.AppendChild(node);

//获取指定节点的指定属性值

string id=node.Attributes["id"].Value;

//获取指定节点中的文本

string content=node.InnerText;

//保存XML文件

xml.Save(“xml文件存储的路径path”);

第二种:

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

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

using System.Xml;

//初始化一个xml实例

XmlDocument xml=new XmlDocument();

  

//导入指定xml文件

xml.Load(path);

xml.Load(HttpContext.Current.Server.MapPath("~/file/bookstore.xml"));

  

//指定一个节点

XmlNode root=xml.SelectSingleNode("/root");

  

//获取节点下所有直接子节点

XmlNodeList childlist=root.ChildNodes;

  

//判断该节点下是否有子节点

root.HasChildNodes;

  

//获取同名同级节点集合

XmlNodeList nodelist=xml.SelectNodes("/Root/News");

  

//生成一个新节点

XmlElement node=xml.CreateElement("News");

  

//将节点加到指定节点下,作为其子节点

root.AppendChild(node);

  

//将节点加到指定节点下某个子节点前

root.InsertBefore(node,root.ChildeNodes[i]);

  

//为指定节点的新建属性并赋值

node.SetAttribute("id","11111");

  

//为指定节点添加子节点

root.AppendChild(node);

  

//获取指定节点的指定属性值

string id=node.Attributes["id"].Value;

  

//获取指定节点中的文本

string content=node.InnerText;

  

//保存XML文件

string path=Server.MapPath("~/file/bookstore.xml");

xml.Save(path);

//or use :xml.Save(HttpContext.Current.Server.MapPath("~/file/bookstore.xml"));

  

二、具体实例

  

在C#.net中如何操作XML

需要添加的命名空间:

using System.Xml;

  

定义几个公共对象:

XmlDocument xmldoc ;

XmlNode xmlnode ;

XmlElement xmlelem ;

  

1,创建到服务器同名目录下的xml文件:

  

  

方法一:

xmldoc = new XmlDocument ( ) ;

//加入XML的声明段落,<?xml version="1.0" encoding="gb2312"?>

XmlDeclaration xmldecl;

 xmldecl = xmldoc.CreateXmlDeclaration("1.0","gb2312",null);

 xmldoc.AppendChild ( xmldecl);

  

//加入一个根元素

xmlelem = xmldoc.CreateElement ( "" , "Employees" , "" ) ;

xmldoc.AppendChild ( xmlelem ) ;

//加入另外一个元素

for(int i=1;i<3;i++)

{

  

XmlNode root=xmldoc.SelectSingleNode("Employees");//查找<Employees>

XmlElement xe1=xmldoc.CreateElement("Node");//创建一个<Node>节点

xe1.SetAttribute("genre","李赞红");//设置该节点genre属性

xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性

  

XmlElement xesub1=xmldoc.CreateElement("title");

xesub1.InnerText="CS从入门到精通";//设置文本节点

xe1.AppendChild(xesub1);//添加到<Node>节点中

XmlElement xesub2=xmldoc.CreateElement("author");

xesub2.InnerText="候捷";

xe1.AppendChild(xesub2);

XmlElement xesub3=xmldoc.CreateElement("price");

xesub3.InnerText="58.3";

xe1.AppendChild(xesub3);

  

root.AppendChild(xe1);//添加到<Employees>节点中

}

//保存创建好的XML文档

xmldoc.Save ( Server.MapPath("data.xml") ) ;

  

//

结果:在同名目录下生成了名为data.xml的文件,内容如下,

<?xml version="1.0" encoding="gb2312"?>

<Employees>

  <Node genre="李赞红" ISBN="2-3631-4">

    <title>CS从入门到精通</title>

    <author>候捷</author>

    <price>58.3</price>

  </Node>

  <Node genre="李赞红" ISBN="2-3631-4">

    <title>CS从入门到精通</title>

    <author>候捷</author>

    <price>58.3</price>

  </Node>

</Employees>

  

  

方法二:

XmlTextWriter xmlWriter;

   string strFilename = Server.MapPath("data1.xml") ;

  

   xmlWriter = new XmlTextWriter(strFilename,Encoding.Default);//创建一个xml文档

   xmlWriter.Formatting = Formatting.Indented;

   xmlWriter.WriteStartDocument();

   xmlWriter.WriteStartElement("Employees");

  

   xmlWriter.WriteStartElement("Node");

   xmlWriter.WriteAttributeString("genre","李赞红");

   xmlWriter.WriteAttributeString("ISBN","2-3631-4");

  

   xmlWriter.WriteStartElement("title");

   xmlWriter.WriteString("CS从入门到精通");

   xmlWriter.WriteEndElement();

  

   xmlWriter.WriteStartElement("author");

   xmlWriter.WriteString("候捷");

   xmlWriter.WriteEndElement();

  

   xmlWriter.WriteStartElement("price");

   xmlWriter.WriteString("58.3");

   xmlWriter.WriteEndElement();

  

   xmlWriter.WriteEndElement();

  

   xmlWriter.Close();

//

结果:

<?xml version="1.0" encoding="gb2312"?>

<Employees>

  <Node genre="李赞红" ISBN="2-3631-4">

    <title>CS从入门到精通</title>

    <author>候捷</author>

    <price>58.3</price>

  </Node>

</Employees>

  

2,添加一个结点:

  

XmlDocument xmlDoc=new XmlDocument();

xmlDoc.Load(Server.MapPath("data.xml"));

XmlNode root=xmlDoc.SelectSingleNode("Employees");//查找<Employees>

XmlElement xe1=xmlDoc.CreateElement("Node");//创建一个<Node>节点

xe1.SetAttribute("genre","张三");//设置该节点genre属性

xe1.SetAttribute("ISBN","1-1111-1");//设置该节点ISBN属性

  

XmlElement xesub1=xmlDoc.CreateElement("title");

xesub1.InnerText="C#入门帮助";//设置文本节点

xe1.AppendChild(xesub1);//添加到<Node>节点中

XmlElement xesub2=xmlDoc.CreateElement("author");

xesub2.InnerText="高手";

xe1.AppendChild(xesub2);

XmlElement xesub3=xmlDoc.CreateElement("price");

xesub3.InnerText="158.3";

xe1.AppendChild(xesub3);

  

root.AppendChild(xe1);//添加到<Employees>节点中

xmlDoc.Save ( Server.MapPath("data.xml") );

  

//

结果:在xml原有的内容里添加了一个结点,内容如下,

<?xml version="1.0" encoding="gb2312"?>

<Employees>

  <Node genre="李赞红" ISBN="2-3631-4">

    <title>CS从入门到精通</title>

    <author>候捷</author>

    <price>58.3</price>

  </Node>

  <Node genre="李赞红" ISBN="2-3631-4">

    <title>CS从入门到精通</title>

    <author>候捷</author>

    <price>58.3</price>

  </Node>

  <Node genre="张三" ISBN="1-1111-1">

    <title>C#入门帮助</title>

    <author>高手</author>

    <price>158.3</price>

  </Node>

</Employees>

  

3,修改结点的值(属性和子结点):

  

XmlDocument xmlDoc=new XmlDocument();

xmlDoc.Load( Server.MapPath("data.xml") );

  

XmlNodeList nodeList=xmlDoc.SelectSingleNode("Employees").ChildNodes;//获取Employees节点的所有子节点

  

foreach(XmlNode xn in nodeList)//遍历所有子节点

{

XmlElement xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型

if(xe.GetAttribute("genre")=="张三")//如果genre属性值为“张三”

{

xe.SetAttribute("genre","update张三");//则修改该属性为“update张三”

  

XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点

foreach(XmlNode xn1 in nls)//遍历

{

XmlElement xe2=(XmlElement)xn1;//转换类型

if(xe2.Name=="author")//如果找到

{

xe2.InnerText="亚胜";//则修改

}

}

}

}

xmlDoc.Save( Server.MapPath("data.xml") );//保存。

  

//

结果:将原来的所有结点的信息都修改了,xml的内容如下,

<?xml version="1.0" encoding="gb2312"?>

<Employees>

  <Node genre="李赞红" ISBN="2-3631-4">

    <title>CS从入门到精通</title>

    <author>候捷</author>

    <price>58.3</price>

  </Node>

  <Node genre="李赞红" ISBN="2-3631-4">

    <title>CS从入门到精通</title>

    <author>候捷</author>

    <price>58.3</price>

  </Node>

  <Node genre="update张三" ISBN="1-1111-1">

    <title>C#入门帮助</title>

    <author>亚胜</author>

    <price>158.3</price>

  </Node>

</Employees>

  

4,修改结点(添加结点的属性和添加结点的自结点):

XmlDocument xmlDoc=new XmlDocument();

xmlDoc.Load( Server.MapPath("data.xml") );

  

XmlNodeList nodeList=xmlDoc.SelectSingleNode("Employees").ChildNodes;//获取Employees节点的所有子节点

  

foreach(XmlNode xn in nodeList)

{

XmlElement xe=(XmlElement)xn;

xe.SetAttribute("test","111111");

  

XmlElement xesub=xmlDoc.CreateElement("flag");

xesub.InnerText="1";

xe.AppendChild(xesub);

}

xmlDoc.Save( Server.MapPath("data.xml") );

  

//

结果:每个结点的属性都添加了一个,子结点也添加了一个,内容如下,

<?xml version="1.0" encoding="gb2312"?>

<Employees>

  <Node genre="李赞红" ISBN="2-3631-4" test="111111">

    <title>CS从入门到精通</title>

    <author>候捷</author>

    <price>58.3</price>

    <flag>1</flag>

  </Node>

  <Node genre="李赞红" ISBN="2-3631-4" test="111111">

    <title>CS从入门到精通</title>

    <author>候捷</author>

    <price>58.3</price>

    <flag>1</flag>

  </Node>

  <Node genre="update张三" ISBN="1-1111-1" test="111111">

    <title>C#入门帮助</title>

    <author>亚胜</author>

    <price>158.3</price>

    <flag>1</flag>

  </Node>

</Employees>

  

5,删除结点中的某一个属性:

XmlDocument xmlDoc=new XmlDocument();

xmlDoc.Load( Server.MapPath("data.xml") );

XmlNodeList xnl=xmlDoc.SelectSingleNode("Employees").ChildNodes;

foreach(XmlNode xn in xnl)

{

XmlElement xe=(XmlElement)xn;

xe.RemoveAttribute("genre");//删除genre属性

  

XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点

foreach(XmlNode xn1 in nls)//遍历

{

XmlElement xe2=(XmlElement)xn1;//转换类型

if(xe2.Name=="flag")//如果找到

{

xe.RemoveChild(xe2);//则删除

}

}

}

xmlDoc.Save( Server.MapPath("data.xml") );

  

//]

结果:删除了结点的一个属性和结点的一个子结点,内容如下,

<?xml version="1.0" encoding="gb2312"?>

<Employees>

  <Node ISBN="2-3631-4" test="111111">

    <title>CS从入门到精通</title>

    <author>候捷</author>

    <price>58.3</price>

  </Node>

  <Node ISBN="2-3631-4" test="111111">

    <title>CS从入门到精通</title>

    <author>候捷</author>

    <price>58.3</price>

  </Node>

  <Node ISBN="1-1111-1" test="111111">

    <title>C#入门帮助</title>

    <author>亚胜</author>

    <price>158.3</price>

  </Node>

</Employees>

  

6,删除结点:

XmlDocument xmlDoc=new XmlDocument();

xmlDoc.Load( Server.MapPath("data.xml") );

XmlNode root=xmlDoc.SelectSingleNode("Employees");

XmlNodeList xnl=xmlDoc.SelectSingleNode("Employees").ChildNodes;

for(int i=0;i<xnl.Count;i++)

{

XmlElement xe=(XmlElement)xnl.Item(i);

if(xe.GetAttribute("genre")=="张三")

{

root.RemoveChild(xe);

if(i<xnl.Count)i=i-1;

}

}

xmlDoc.Save( Server.MapPath("data.xml") );

  

//]

结果:删除了符合条件的所有结点,原来的内容:

  

<?xml version="1.0" encoding="gb2312"?>

<Employees>

  <Node genre="李赞红" ISBN="2-3631-4">

    <title>CS从入门到精通</title>

    <author>候捷</author>

    <price>58.3</price>

  </Node>

  <Node genre="李赞红" ISBN="2-3631-4">

    <title>CS从入门到精通</title>

    <author>候捷</author>

    <price>58.3</price>

  </Node>

  <Node genre="张三" ISBN="1-1111-1">

    <title>C#入门帮助</title>

    <author>高手</author>

    <price>158.3</price>

  </Node>

  <Node genre="张三" ISBN="1-1111-1">

    <title>C#入门帮助</title>

    <author>高手</author>

    <price>158.3</price>

  </Node>

</Employees>

  

删除后的内容:

<?xml version="1.0" encoding="gb2312"?>

<Employees>

  <Node genre="李赞红" ISBN="2-3631-4">

    <title>CS从入门到精通</title>

    <author>候捷</author>

    <price>58.3</price>

  </Node>

  <Node genre="李赞红" ISBN="2-3631-4">

    <title>CS从入门到精通</title>

    <author>候捷</author>

    <price>58.3</price>

  </Node>

</Employees>

  

 7,按照文本文件读取xml

  

System.IO.StreamReader myFile =new

System.IO.StreamReader(Server.MapPath("data.xml"),System.Text.Encoding.Default);

//注意System.Text.Encoding.Default

  

string myString = myFile.ReadToEnd();//myString是读出的字符串

myFile.Close();

  

三、高级应用

  

/*读取xml数据   两种xml方式*/

<aaa>

     <bb>something</bb>

     <cc>something</cc>

</aaa>

   

<aaa>

    <add key="123" value="321"/>

</aaa>

  

/*第一种方法*/

DS.ReadXml("your xmlfile name");

Container.DataItem("bb");

Container.DataItem("cc");

DS.ReadXmlSchema("your xmlfile name");

   

/*第二种方法*/

<aaa>

    <add key="123" value="321"/>

</aaa>

如果我要找到123然后取到321应该怎么写呢?

   

using System.XML;

XmlDataDocument xmlDoc = new System.Xml.XmlDataDocument();

xmlDoc.Load(@"c:/Config.xml");

XmlElement elem = xmlDoc.GetElementById("add");

string str = elem.Attributes["value"].Value

   

   

/*第三种方法:  SelectSingleNode  读取两种格式的xml *---/

--------------------------------------------------------------------

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

<configuration>

    <appSettings>

       <ConnectionString>Data Source=yf; user id=ctm_dbo;password=123</ConnectionString>           

  </appSettings>

</configuration>

--------------------------------------------------------------------------

XmlDocument doc = new XmlDocument();

doc.Load(strXmlName);

   

    XmlNode node=doc.SelectSingleNode("/configuration/appSettings/ConnectionString");

    if(node!=null)

    {

     string k1=node.Value;    //null

     string k2=node.InnerText;//Data Source=yf; user id=ctm_dbo;password=123

     string k3=node.InnerXml;//Data Source=yf; user id=ctm_dbo;password=123

     node=null;

    }

   

********************************************************************

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

<configuration>

    <appSettings>

       <add key="ConnectionString" value="Data Source=yf; user id=ctm_dbo;password=123" />           

  </appSettings>

</configuration>

**--------------------------------------------------------------------**

     XmlNode node=doc.SelectSingleNode("/configuration/appSettings/add");

    if(node!=null)

    {

     string k=node.Attributes["key"].Value;

     string v=node.Attributes["value"].Value;

     node=null;

    }

*--------------------------------------------------------------------*

    XmlNode node=doc.SelectSingleNode("/configuration/appSettings/add");

    if(node!=null)

    {

     XmlNodeReader nr=new XmlNodeReader(node);

     nr.MoveToContent();

    //检查当前节点是否是内容节点。如果此节点不是内容节点,则读取器向前跳至下一个内容节点或文件结尾。

     nr.MoveToAttribute("value");

     string s=nr.Value;

     node=null;

    }

到此这篇关于详解C#操作XML的方法总结的文章就介绍到这了

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C# 中,ToString() 方法是一个非常常用的方法,它允许将一个对象转换成字符串形式。以下是一些关于 C# ToString() 方法的详细解释: 1. ToString() 方法是从 Object 类继承而来的。因此,每个对象都有一个 ToString() 方法,即使你没有显式地在自己的类中定义它。 2. 默认情况下,Object 类中的 ToString() 方法返回一个包含类名的字符串。例如,一个 Person 类的 ToString() 方法将返回 "Person"。 3. 我们可以在自己的类中重写 ToString() 方法,以便输出我们需要的字符串形式。这个方法应该返回一个字符串,它描述了对象的状态。 4. 通常,ToString() 方法用于将对象转换为易于阅读和输出的字符串形式,以便于调试和测试。 5. 当我们在使用 Console.WriteLine() 方法等将对象输出到控制台时,ToString() 方法会自动被调用。例如: ```csharp Person person = new Person { Name = "John", Age = 30 }; Console.WriteLine(person); ``` 在上面的代码中,我们输出了一个 Person 对象,但是并没有显式地调用 ToString() 方法。但是,由于 Console.WriteLine() 方法需要将对象转换成字符串形式,因此它会自动调用 ToString() 方法。 6. 在重写 ToString() 方法时,我们应该注意避免出现异常,因为 ToString() 方法通常会被其他代码频繁调用。如果 ToString() 方法抛出异常,那么可能会影响整个应用程序的正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值