c# xml操作类
引子http://www.cnblogs.com/QDuck/archive/2007/01/10/617240.aspx
public class XmlControl
{
protected string strXmlFile;
protected XmlDocument objXmlDoc = new XmlDocument();
public XmlControl(string XmlFile)
{
//
// TODO: 在這裡加入建構函式的程式碼
//
try
{
objXmlDoc.Load(XmlFile);
}
catch (System.Exception ex)
{
throw ex;
}
strXmlFile = XmlFile;
}
public DataView GetData(string XmlPathNode)
{
//查找數據。返回一個DataView
DataSet ds = new DataSet();
StringReader read = new StringReader(objXmlDoc.SelectSingleNode(XmlPathNode).OuterXml);
ds.ReadXml(read);
return ds.Tables[0].DefaultView;
}
public void Replace(string XmlPathNode,string Content)
{
//更新節點內容。
objXmlDoc.SelectSingleNode(XmlPathNode).InnerText = Content;
}
public void Delete(string Node)
{
//刪除一個節點。
string mainNode = Node.Substring(0,Node.LastIndexOf("/"));
objXmlDoc.SelectSingleNode(mainNode).RemoveChild(objXmlDoc.SelectSingleNode(Node));
}
public void InsertNode(string MainNode,string ChildNode,string Element,string Content)
{
//插入一節點和此節點的一子節點。
XmlNode objRootNode = objXmlDoc.SelectSingleNode(MainNode);
XmlElement objChildNode = objXmlDoc.CreateElement(ChildNode);
objRootNode.AppendChild(objChildNode);
XmlElement objElement = objXmlDoc.CreateElement(Element);
objElement.InnerText = Content;
objChildNode.AppendChild(objElement);
}
public void InsertElement(string MainNode,string Element,string Attrib,string AttribContent,string Content)
{
//插入一個節點,帶一屬性。
XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode);
XmlElement objElement = objXmlDoc.CreateElement(Element);
objElement.SetAttribute(Attrib,AttribContent);
objElement.InnerText = Content;
objNode.AppendChild(objElement);
}
public void InsertElement(string MainNode,string Element,string Content)
{
//插入一個節點,不帶屬性。
XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode);
XmlElement objElement = objXmlDoc.CreateElement(Element);
objElement.InnerText = Content;
objNode.AppendChild(objElement);
}
public void Save()
{
//保存文檔。
try
{
objXmlDoc.Save(strXmlFile);
}
catch (System.Exception ex)
{
throw ex;
}
objXmlDoc = null;
}
}
=========================================================
实例应用:
string strXmlFile = Server.MapPath("TestXml.xml");
XmlControl xmlTool = new XmlControl(strXmlFile);
// 數據顯視
// dgList.DataSource = xmlTool.GetData("Book/Authors[ISBN=\"0002\"]");
// dgList.DataBind();
// 更新元素內容
// xmlTool.Replace("Book/Authors[ISBN=\"0002\"]/Content","ppppppp");
// xmlTool.Save();
// 添加一個新節點
// xmlTool.InsertNode("Book","Author","ISBN","0004");
// xmlTool.InsertElement("Book/Author[ISBN=\"0004\"]","Content","aaaaaaaaa");
// xmlTool.InsertElement("Book/Author[ISBN=\"0004\"]","Title","Sex","man","iiiiiiii");
// xmlTool.Save();
// 刪除一個指定節點的所有內容和屬性
// xmlTool.Delete("Book/Author[ISBN=\"0004\"]");
// xmlTool.Save();
// 刪除一個指定節點的子節點
// xmlTool.Delete("Book/Authors[ISBN=\"0003\"]");
// xmlTool.Save();
1
<%2
Class XMLDOMDocument3
Private fNode,fANode4
Private fErrInfo,fFileName,fOpen5
Dim XmlDom6

7
'返回节点的缩进字串8
Private Property Get TabStr(byVal Node)9
TabStr=""10
If Node Is Nothing Then Exit Property11
If not Node.parentNode Is nothing Then TabStr=" "&TabStr(Node.parentNode)12
End Property13

14
'返回一个子节点对象,ElementOBJ为父节点,ChildNodeObj要查找的节点,IsAttributeNode指出是否为属性对象15
Public Property Get ChildNode(byVal ElementOBJ,byVal ChildNodeObj,byVal IsAttributeNode)16
Dim Element17
Set ChildNode=Nothing18

19
If IsNull(ChildNodeObj) Then20
If IsAttributeNode=false Then21
Set ChildNode=fNode22
Else23
Set ChildNode=fANode24
End If25
Exit Property26
ElseIf IsObject(ChildNodeObj) Then27
Set ChildNode=ChildNodeObj28
Exit Property29
End If30

31
Set Element=Nothing32
If LCase(TypeName(ChildNodeObj))="string" and Trim(ChildNodeObj)<>"" Then33
If IsNull(ElementOBJ) Then 34
Set Element=fNode35
ElseIf LCase(TypeName(ElementOBJ))="string" Then36
If Trim(ElementOBJ)<>"" Then37
Set Element=XmlDom.selectSingleNode("//"&Trim(ElementOBJ))38
If Lcase(Element.nodeTypeString)="attribute" Then Set Element=Element.selectSingleNode("..")39
End If40
ElseIf IsObject(ElementOBJ) Then41
Set Element=ElementOBJ42
End If43

44
If Element Is Nothing Then45
Set ChildNode=XmlDom.selectSingleNode("//"&Trim(ChildNodeObj))46
ElseIf IsAttributeNode=true Then47
Set ChildNode=Element.selectSingleNode("./@"&Trim(ChildNodeObj))48
Else49
Set ChildNode=Element.selectSingleNode("./"&Trim(ChildNodeObj))50
End If51
End If52
End Property53

54
'读取最后的错误信息55
Public Property Get ErrInfo56
ErrInfo=fErrInfo57
End Property58

59
'给xml内容60
Public Property Get xmlText(byVal ElementOBJ)61
xmlText=""62
If fopen=false Then Exit Property63

64
Set ElementOBJ=ChildNode(XmlDom,ElementOBJ,false)65
If ElementOBJ Is Nothing Then Set ElementOBJ=XmlDom66

67
xmlText=ElementOBJ.xml68
End Property69

70
'=================================================================71
'类初始化72
Private Sub Class_Initialize()73
Set XmlDom=CreateObject("Microsoft.XMLDOM")74
XmlDom.preserveWhiteSpace=true75

76
Set fNode=Nothing77
Set fANode=Nothing78

79
fErrInfo=""80
fFileName=""81
fopen=false82
End Sub83

84
'类释放85
Private Sub Class_Terminate()86
Set fNode=Nothing87
Set fANode=Nothing 88
Set XmlDom=nothing89
fopen=false90
End Sub91

92
'=====================================================================93
'建立一个XML文件,RootElementName:根结点名。XSLURL:使用XSL样式地址94
'返回根结点95
Function Create(byVal RootElementName,byVal XslUrl)96
Dim PINode,RootElement97

98
Set Create=Nothing99

100
If (XmlDom Is Nothing) Or (fopen=true) Then Exit Function101

102
If Trim(RootElementName)="" Then RootElementName="Root"103

104
Set PINode=XmlDom.CreateProcessingInstruction("xml", "version=""1.0"" encoding=""GB2312""")105
XmlDom.appendChild PINode106

107
Set PINode=XMLDOM.CreateProcessingInstruction("xml-stylesheet", "type=""text/xsl"" href="""&XslUrl&"""")108
XmlDom.appendChild PINode109

110
Set RootElement=XmlDom.createElement(Trim(RootElementName))111
XmlDom.appendChild RootElement112

113
Set Create=RootElement114

115
fopen=True116
set fNode=RootElement117
End Function118

119
'开打一个已经存在的XML文件,返回打开状态120
Function Open(byVal xmlSourceFile)121
Open=false122

123
xmlSourceFile=Trim(xmlSourceFile)124
If xmlSourceFile="" Then Exit Function125

126
XmlDom.async = false127
XmlDom.load xmlSourceFile128

129
fFileName=xmlSourceFile130

131
If not IsError Then132
Open=true133
fopen=true134
End If135
End Function136

137
'关闭138
Sub Close()139
Set fNode=Nothing140
Set fANode=Nothing141

142
fErrInfo=""143
fFileName=""144
fopen=false145
End Sub146

147
'读取一个NodeOBJ的节点Text的值148
'NodeOBJ可以是节点对象或节点名,为null就取当前默认fNode149
Function getNodeText(byVal NodeOBJ)150
getNodeText=""151
If fopen=false Then Exit Function152

153
Set NodeOBJ=ChildNode(null,NodeOBJ,false)154
If NodeOBJ Is Nothing Then Exit Function155

156
If Lcase(NodeOBJ.nodeTypeString)="element" Then157
set fNode=NodeOBJ158
Else159
set fANode=NodeOBJ160
End If161
getNodeText=NodeOBJ.text162
End function163

164
'插入在BefelementOBJ下面一个名为ElementName,Value为ElementText的子节点。165
'IsFirst:是否插在第一个位置;IsCDATA:说明节点的值是否属于CDATA类型166
'插入成功就返回新插入这个节点167
'BefelementOBJ可以是对象也可以是节点名,为null就取当前默认对象168
Function InsertElement(byVal BefelementOBJ,byVal ElementName,byVal ElementText,byVal IsFirst,byVal IsCDATA)169
Dim Element,TextSection,SpaceStr170
Set InsertElement=Nothing171

172
If not fopen Then Exit Function173

174
Set BefelementOBJ=ChildNode(XmlDom,BefelementOBJ,false)175
If BefelementOBJ Is Nothing Then Exit Function176

177
Set Element=XmlDom.CreateElement(Trim(ElementName))178

179
'SpaceStr=vbCrLf&TabStr(BefelementOBJ)180
'Set STabStr=XmlDom.CreateTextNode(SpaceStr)181

182
'If Len(SpaceStr)>2 Then SpaceStr=Left(SpaceStr,Len(SpaceStr)-2)183
'Set ETabStr=XmlDom.CreateTextNode(SpaceStr)184

185
If IsFirst=true Then 186
'BefelementOBJ.InsertBefore ETabStr,BefelementOBJ.firstchild187
BefelementOBJ.InsertBefore Element,BefelementOBJ.firstchild188
'BefelementOBJ.InsertBefore STabStr,BefelementOBJ.firstchild189
Else190
'BefelementOBJ.appendChild STabStr191
BefelementOBJ.appendChild Element192
'BefelementOBJ.appendChild ETabStr193
End If194

195
If IsCDATA=true Then 196
set TextSection=XmlDom.createCDATASection(ElementText)197
Element.appendChild TextSection198
ElseIf ElementText<>"" Then199
Element.Text=ElementText200
End If201

202
Set InsertElement=Element203
Set fNode=Element204
End Function205

206
'在ElementOBJ节点上插入或修改名为AttributeName,值为:AttributeText的属性207
'如果已经存在名为AttributeName的属性对象,就进行修改。208
'返回插入或修改属性的Node209
'ElementOBJ可以是Element对象或名,为null就取当前默认对象210
Function setAttributeNode(byVal ElementOBJ,byVal AttributeName,byVal AttributeText)211
Dim AttributeNode212
Set setAttributeNode=nothing213

214
If not fopen Then Exit Function215

216
Set ElementOBJ=ChildNode(XmlDom,ElementOBJ,false)217
If ElementOBJ Is Nothing Then Exit Function 218

219
Set AttributeNode=ElementOBJ.attributes.getNamedItem(AttributeName)220
If AttributeNode Is nothing Then 221
Set AttributeNode=XmlDom.CreateAttribute(AttributeName)222
ElementOBJ.setAttributeNode AttributeNode223
End If224
AttributeNode.text=AttributeText225

226
set fNode=ElementOBJ227
set fANode=AttributeNode228
Set setAttributeNode=AttributeNode229
End Function230

231
'修改ElementOBJ节点的Text值,并返回这个节点232
'ElementOBJ可以对象或对象名,为null就取当前默认对象233
Function UpdateNodeText(byVal ElementOBJ,byVal NewElementText,byVal IsCDATA)234
Dim TextSection235

236
set UpdateNodeText=nothing237
If not fopen Then Exit Function238

239
Set ElementOBJ=ChildNode(XmlDom,ElementOBJ,false)240
If ElementOBJ Is Nothing Then Exit Function 241

242
If IsCDATA=true Then 243
set TextSection=XmlDom.createCDATASection(NewElementText)244
If ElementOBJ.firstchild Is Nothing Then 245
ElementOBJ.appendChild TextSection246
ElseIf LCase(ElementOBJ.firstchild.nodeTypeString)="cdatasection" Then247
ElementOBJ.replaceChild TextSection,ElementOBJ.firstchild248
End If249
Else250
ElementOBJ.Text=NewElementText251
End If252

253
set fNode=ElementOBJ254
Set UpdateNodeText=ElementOBJ255
End Function256

257
'返回符合testValue条件的第一个ElementNode,为null就取当前默认对象258
Function getElementNode(byVal ElementName,byVal testValue)259
Dim Element,regEx,baseName260

261
Set getElementNode=nothing262
If not fopen Then Exit Function263

264
testValue=Trim(testValue)265
Set regEx=New RegExp266
regEx.Pattern="^[A-Za-z]+"267
regEx.IgnoreCase=true268
If regEx.Test(testValue) Then testValue="/"&testValue269
Set regEx=nothing270

271
baseName=LCase(Right(ElementName,Len(ElementName)-InStrRev(ElementName,"/",-1)))272

273
Set Element=XmlDom.SelectSingleNode("//"&ElementName&testValue)274

275
If Element Is Nothing Then276
'Response.write ElementName&testValue277
Set getElementNode=nothing278
Exit Function279
End If280

281
Do While LCase(Element.baseName)<>baseName282
Set Element=Element.selectSingleNode("..")283
If Element Is Nothing Then Exit Do284
Loop285

286
If LCase(Element.baseName)<>baseName Then 287
Set getElementNode=nothing288
Else289
Set getElementNode=Element290
If Lcase(Element.nodeTypeString)="element" Then 291
Set fNode=Element292
Else293
Set fANode=Element294
End If295
End If296
End Function297

298
'删除一个子节点299
Function removeChild(byVal ElementOBJ)300
removeChild=false301
If not fopen Then Exit Function302

303
Set ElementOBJ=ChildNode(null,ElementOBJ,false)304
If ElementOBJ Is Nothing Then Exit Function 305

306
'response.write ElementOBJ.baseName307

308
If Lcase(ElementOBJ.nodeTypeString)="element" Then309
If ElementOBJ Is fNode Then set fNode=Nothing310
If ElementOBJ.parentNode Is Nothing Then311
XmlDom.removeChild(ElementOBJ)312
Else313
ElementOBJ.parentNode.removeChild(ElementOBJ)314
End If315
removeChild=True316
End If317
End Function318

319
'清空一个节点所有子节点320
Function ClearNode(byVal ElementOBJ)321
set ClearNode=Nothing322
If not fopen Then Exit Function323

324
Set ElementOBJ=ChildNode(null,ElementOBJ,false)325
If ElementOBJ Is Nothing Then Exit Function 326

327
ElementOBJ.text=""328
ElementOBJ.removeChild(ElementOBJ.firstchild)329

330
Set ClearNode=ElementOBJ331
Set fNode=ElementOBJ332
End Function333

334
'删除子节点的一个属性335
Function removeAttributeNode(byVal ElementOBJ,byVal AttributeOBJ)336
removeAttributeNode=false337
If not fopen Then Exit Function338

339
Set ElementOBJ=ChildNode(XmlDom,ElementOBJ,false)340
If ElementOBJ Is Nothing Then Exit Function 341

342
Set AttributeOBJ=ChildNode(ElementOBJ,AttributeOBJ,true)343
If not AttributeOBJ Is nothing Then344
ElementOBJ.removeAttributeNode(AttributeOBJ)345
removeAttributeNode=True346
End If347
End Function348

349
'保存打开过的文件,只要保证FileName不为空就可以实现保存350
Function Save()351
On Error Resume Next352
Save=false353
If (not fopen) or (fFileName="") Then Exit Function354

355
XmlDom.Save fFileName356
Save=(not IsError)357
If Err.number<>0 then358
Err.clear359
Save=false360
End If361
End Function362

363
'另存为XML文件,只要保证FileName不为空就可以实现保存364
Function SaveAs(SaveFileName)365
On Error Resume Next366
SaveAs=false367
If (not fopen) or SaveFileName="" Then Exit Function368
XmlDom.Save SaveFileName369
SaveAs=(not IsError)370
If Err.number<>0 then371
Err.clear372
SaveAs=false373
End If374
End Function375

376
'检查并打印错误信息377
Private Function IsError()378
If XmlDom.ParseError.errorcode<>0 Then379
fErrInfo="<h1>Error"&XmlDom.ParseError.errorcode&"</h1>"380
fErrInfo=fErrInfo&"<B>Reason :</B>"&XmlDom.ParseError.reason&"<br>"381
fErrInfo=fErrInfo&"<B>URL :</B>"&XmlDom.ParseError.url&"<br>"382
fErrInfo=fErrInfo&"<B>Line :</B>"&XmlDom.ParseError.line&"<br>"383
fErrInfo=fErrInfo&"<B>FilePos:</B>"&XmlDom.ParseError.filepos&"<br>"384
fErrInfo=fErrInfo&"<B>srcText:</B>"&XmlDom.ParseError.srcText&"<br>"385
IsError=True386
Else387
IsError=False388
End If389
End Function390
End Class391
%>392

浙公网安备 33010602011771号