c#

位置:IT落伍者 >> c# >> 浏览文章

在.NET中操作XmlDocument


发布日期:2022年08月08日
 
在.NET中操作XmlDocument

大家想必一定都了解XML利用XML技术来存储数据和文档是一件很容易的事情NET Framework 在它的命名空间SystemXml 就提供了一种可以很方便的操作xml的类XmlDocument它使用起来非常容易XmlDocument 其实就是一个简单的树下面详细的介绍XmlDocument 的使用方法

下面是这个类中操作节点的常用方法

// create a new node in the document object from the source node

//and name it as sName

// the return value indicates success or failure

public bool AddNode(XmlNode oSource String sName);

// same as above except that it also specifies the parent node of the

// newly created node

// the return value indicates success or failure (returns false if the

// parent node does not exist)

public bool AddNode(XmlNode oSource String sName String sParent);

// create a set of new nodes in the document object from the source node

// list and name them as sName

// the return value indicates success or failure

public bool AddNodes(XmlNodeList oSourceList String sName);

// same as above except that it also specifies the parent node of the

// newly created nodes the return value indicates success or failure

// (returns false if the parent node

// does not exist)

public bool AddNodes(XmlNodeList oSourceList String sName String sParent);

// merge the source node into a node named sName in the document object

// the node named sName will be created if it does not exist

// the return value indicates success or failure

public bool MergeNode(XmlNode oSource String sName);

// same as above except that it also specifies the parent node of the merged node

// the return value indicates success or failure (returns false if the parent node

// does not exist)

public bool MergeNode(XmlNode oSource String sName String sParent);

下面我们给一个增加节点的例子

docVechilexml

<VehicleData>

<Record>

<id></id>

<make>Ford</make>

<model>Escort</model>

<year></year>

</Record>

<Record>

<id></id>

<make>Toyota</make>

<model>Tercel</model>

<year></year>

</Record>

<Record>

<id></id>

<make>Mazda</make>

<model>GLC</model>

<year></year>

</Record>

</VehicleData>

docDriverxml

<DriverData>

<Record>

<id></id>

<firstname>Albert</firstname>

<lastname>Einstein</lastname>

</Record>

<Record>

<id></id>

<firstname>Clint</firstname>

<lastname>Eastwood</lastname>

</Record>

<Record>

<id></id>

<firstname>James</firstname>

<lastname>Bond</lastname>

</Record>

</DriverData>

下面的代码将增加一个节点

Dim myDoc As XMLDocumentEx = New XMLDocumentEx()

myDocLoadXml(<Data></Data>)

myDocAddNode(docVehicleSelectSingleNode(//Record) VehicleRecord Data)

myDocAddNode(docDriverSelectSingleNode(//Record) DriverRecord Data)

myDocxml<Data>

<VehicleRecord>

<id></id>

<make></make>

<model></model>

<year></year>

</ Vehicle Record>

<DriverRecord>

<id></id>

<firstname></firstname>

<lastname></lastname>

</DriverRecord>

</Data> 我们也可是使用AddNodes方法把一个记录集的所有记录增加到节点上Dim myDoc As XMLDocumentEx = New XMLDocumentEx()

myDocLoadXml(<Data> <VehicleData></Vehicle Data><DriverData></DriverData> </Data>)

myDocAddNodes(docVehicleSelectNodes(//Record) VehicleRecord Vehicle Data)

myDocAddNodes(docDriverSelectNodes(//Record) DriverRecord DriverData)结果如下myDocxml<Data>

<VehicleData>

<VehicleRecord>

<id></id>

<make>Ford</make>

<model>Escort</model>

<year></year>

</VehicleRecord>

<VehicleRecord>

<id></id>

<make>Toyota</make>

<model>Tercel</model>

<year></year>

</VehicleRecord>

<VehicleRecord>

<id></id>

<make>Mazda</make>

<model>GLC</model>

<year></year>

</VehicleRecord>

</VehicleData>

<DriverData>

<DriverRecord>

<id></id>

<firstname>Albert</firstname>

<lastname>Einstein</lastname>

</DriverRecord>

<DriverRecord>

<id></id>

<firstname>Clint</firstname>

<lastname>Eastwood</lastname>

</DriverRecord>

<DriverRecord>

<id></id>

<firstname>James</firstname>

<lastname>Bond</lastname>

</DriverRecord>

</DriverData>

</Data>下面我介绍如何合并节点假设我们有两个XmlDocument文件docBook和docBook这两个文档都包含 <Book> 节点 在docBook 中的这个 <Book> 节点 包含 <Introduction> <Chapter> and <Chapter> 在docBook中的这个 <Book> 节点 包含 <Chapter> <Chapter> and <Chapter> 下面的代码演示如何合并这两个book节点:Dim myDoc As XMLDocumentEx = New XMLDocumentEx()

myDocLoadXml(<Data> <Book></Book></Data> )

myDocMergeNode(docBookSelectSingleNode(//Book) Book Data )

myDocMergeNode(docBookSelectSingleNode(//Book) Book Data)合并后的效果如下myDocxml<Data>

<Book>

<Introduction></Introduction>

< Chapter ></Chapter>

<Chapter></Chapter>

<Chapter></Chapter>

<Chapter></Chapter>

<Chapter></Chapter>

</Book>

</Data>下面是所有的源代码sealed public class XMLDocumentEx: XmlDocument

{

public bool AddNode(XmlNode oSource String sName)

{

return AddNode(oSource sName null);

}

public bool AddNode(XmlNode oSource String sName String sParent)

{

try

{

if(sName!=null&&oSource!= null)

{

// create the new node with given name

XmlNode oNewNode = CreateElement(sName);

// copy the contents from the source node

oNewNodeInnerXml = oSourceInnerXml;

// if there is no parent node specified then add

// the new node as a child node of the root node

if(sParent!= null) sParent = sParentTrim();

if(sParent== null||sParentEquals(StringEmpty))

{

DocumentElementAppendChild(oNewNode);

return true;

}

// otherwise add the new node as a child of the parent node

else

{

if (!sParentSubstring()Equals(//)) sParent = //+sParent;

XmlNode oParent = SelectSingleNode(sParent);

if (oParent!=null)

{

oParentAppendChild(oNewNode);

return true ;

}

}

}

}

catch (Exception)

{

// error handling code

}

return false;

}

public bool AddNodes(XmlNodeList oSourceList String sName)

{

return AddNodes(oSourceList sName null);

}

public bool AddNodes(XmlNodeList oSourceList String sName String sParent)

{

try

{

if(oSourceList!= null)

{

// call AddNode for each item in the source node list

// return true only if all nodes are added successfully

int i = ;

while(i<oSourceListCount)

{

if (!AddNode(oSourceListItem(i)sNamesParent)) return false;

i++;

}

return true;

}

}

catch (Exception)

{

// error handling code

}

return false;

}

public bool MergeNode(XmlNode oSource String sName)

{

return MergeNode(oSource sName null );

}

public bool MergeNode(XmlNode oSource String sName String sParent)

{

try

{

if(sName!=null&&oSource!= null)

{

XmlNode theNode = null ;

// if there is no parent node specified

if(sParent!= null) sParent = sParentTrim();

if(sParent== null||sParentEquals(StringEmpty))

{

// if the node with specified name does not exist

// add it as a child node of the root node

theNode = SelectSingleNode(//+sName);

if (theNode==null)

{

theNode = CreateElement(sName);

DocumentElementAppendChild(theNode);

}

}

// if the parent node is specified

else

{

// find the parent node

if (!sParentSubstring()Equals(//)) sParent = //+sParent;

XmlNode theParent = SelectSingleNode(sParent);

if (theParent!=null)

{

// if the node with specified name does not exist create

// it first then add it as a child node of the parent node

theNode = theParentSelectSingleNode(sName);

if(theNode==null)

{

theNode = CreateElement(sName);

theParentAppendChild(theNode);

}

}

}

// merge the content of the source node into

// the node with specified name

if(theNode!= null)

{

theNodeInnerXml += oSourceInnerXml;

return true;

}

}

}

catch (Exception)

{

}

return false;

}

}

上一篇:C#默认构造函数的作用

下一篇:.net WinForm用户控件开发:用户控件弹出式属性设置