• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

在.NET中操作XmlDocument_xml

xml 搞代码 7年前 (2018-06-15) 97次浏览 已收录 0个评论

大家想必一定都了解xml,利用XML技术来存储数据和文档是一件很容易的事情,.NET Framework 在它的命名空间System.Xml 就提供了一种可以很方便的操作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

http://www.gaodaima.com/33986.html在.NET中操作XmlDocument_xml

    // 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);

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

docVechile.xml

<VehicleData>     <Record>         <id>1001</id>         <make>Ford</make>         <model>Escort</model>         <year>1984</year>     </Record>     <Record>         <id>1002</id>         <make>Toyota</make>         <model>Tercel</model>         <year>1996</year>     </Record>     <Record>         <id>1003</id>         <make>Mazda</make>         <model>GLC</model>         <year>1985</year>     </Record> </VehicleData>

docDriver.xml

<DriverData>    <Record>        <id>1</id>        <firstname>Albert</firstname>        <lastname>Einstein</lastname>    </Record>    <Record>        <id>2</id>        <firstname>Clint</firstname>        <lastname>Eastwood</lastname>    </Record>    <Record>        <id>3</id>        <firstname>James</firstname>        <lastname>Bond</lastname>    </Record></DriverData>
下面的代码将增加一个节点:
Dim myDoc As XMLDocumentEx = New XMLDocumentEx()myDoc.LoadXml("<Data></Data>")myDoc.AddNode(docVehicle.SelectSingleNode("//Record"), "VehicleRecord", "Data")myDoc.AddNode(docDriver.SelectSingleNode("//Record"), "DriverRecord", "Data")

myDoc.xml

<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()myDoc.LoadXml("<Data> <VehicleData></Vehicle Data><DriverData></DriverData> </Data>")myDoc.AddNodes(docVehicle.SelectNodes("//Record"), "VehicleRecord", " Vehicle Data")myDoc.AddNodes(docDriver.SelectNodes("//Record"), "DriverRecord", "DriverData")
结果如下:

myDoc.xml

<Data>     <VehicleData>        <VehicleRecord>            <id>1001</id>            <make>Ford</make>            <model>Escort</model>            <year>1984</year>        </VehicleRecord>        <VehicleRecord>            <id>1002</id>            <make>Toyota</make>            <model>Tercel</model>            <year>1996</year>        </VehicleRecord>        <VehicleRecord>            <id>1003</id>            <make>Mazda</make>            <model>GLC</model>            <year>1985</year>        </VehicleRecord>    </VehicleData>     <DriverData>        <DriverRecord>            <id>1</id>            <firstname>Albert</firstname>            <lastname>Einstein</lastname>        </DriverRecord>        <DriverRecord>            <id>2</id>            <firstname>Clint</firstname>            <lastname>Eastwood</lastname>        </DriverRecord>        <DriverRecord>            <id>3</id>            <firstname>James</firstname>            <lastname>Bond</lastname>        </DriverRecord>    </DriverData></Data>
下面我介绍如何合并节点。假设我们有两个XmlDocument文件docBook1和docBook2,
这两个文档都包含 <Book> 节点.  在docBook1 中的这个 <Book> 节点 包含
 <Introduction>, <Chapter1>, and <Chapter2>.  
docBook2中的这个 <Book> 节点 包含 <Chapter3>, <Chapter4>, and <Chapter5>.  
下面的代码演示如何合并这两个book节点:
Dim myDoc As XMLDocumentEx = New XMLDocumentEx()myDoc.LoadXml("<Data> <Book></Book></Data> ")myDoc.MergeNode(docBook1.SelectSingleNode("//Book"), "Book", "Data ")myDoc.MergeNode(docBook2.SelectSingleNode("//Book"), "Book", "Data")
合并后的效果如下:

myDoc.xml

<Data>    <Book>        <Introduction>...</Introduction>        < Chapter1 >...</Chapter1>        <Chapter2>...</Chapter2>        <Chapter3>...</Chapter3>        <Chapter4>...</Chapter4>        <Chapter5>...</Chapter5>    </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                oNewNode.InnerXml = oSource.InnerXml;                // if there is no parent node specified, then add                // the new node as a child node of the root node                if(sParent!= null) sParent = sParent.Trim();                if(sParent== null||sParent.Equals(String.Empty))                 {                    DocumentElement.AppendChild(oNewNode);                    return true;                }                // otherwise add the new node as a child of the parent node                else                {                    if (!sParent.Substring(0,2).Equals("//")) sParent = "//"+sParent;                    XmlNode oParent = SelectSingleNode(sParent);                    if (oParent!=null)                    {                        oParent.AppendChild(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 = 0;                while(i<oSourceList.Count)                {                    if (!AddNode(oSourceList.Item(i),sName,sParent)) 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 = sParent.Trim();                if(sParent== null||sParent.Equals(String.Empty))                 {                    // 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);                        DocumentElement.AppendChild(theNode);                    }                }                // if the parent node is specified ...                else                {                    // find the parent node                    if (!sParent.Substring(0,2).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 = theParent.SelectSingleNode(sName);                        if(theNode==null)                        {                            theNode = CreateElement(sName);                            theParent.AppendChild(theNode);                        }                    }                }                // merge the content of the source node into                // the node with specified name                if(theNode!= null)                 {                    theNode.InnerXml += oSource.InnerXml;                    return true;                }            }        }        catch (Exception)        {        }        return false;    }}

欢迎大家阅读《在.NET中操作XmlDocument_xml》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:在.NET中操作XmlDocument_xml

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址