• 编写xmlhelper类【翻译】



    一、XML的表示方式

    Name

    Address

    City

    State

    Zip

    Crazy Zoo

    32 Turtle Lane

    Austin

    Tx

    12345

    Chicago Zoo

    23 Zebra Ave

    Chicago

    IL

    (null)

    Hungry Zoo

    45 Lion st

    Miami

    FL

    33122


    对于以上这样一个二维表,用XML的话有两种标识方式:

    1.用“属性”来表示

    每一列对应一个元素中的属性,表示空值时就是忽略掉这个属性就可以了

    <?xml version="1.0" encoding="utf-8" ?>
    <ZooRoot>
          
    <ZooTable Name="Crazy Zoo" Address="32 Turtle Lane" 
                             City
    ="Austin" State="TX" Zip="12345" />
          
    <ZooTable Name="Chicago Zoo" Address="23 Zebra Ave" 
                                        City
    ="Chicago" State="IL" />
          
    <ZooTable Name="Hungry Zoo" Address="45 Lion st" 
                              City
    ="Miami" State="FL" Zip="33122" />
    </ZooRoot>

     2.用“元素”来表示

    <?xml version="1.0" encoding="utf-8" ?> 
    <ZooRoot>
          
    <ZooTable>
                
    <Name>Crazy Zoo</Name>
                
    <Address>32 Turtle Lane</Address>
                
    <City>Austin</City>
                
    <State>TX</State>
                
    <Zip>12345</Zip>
          
    </ZooTable>
          
    <ZooTable>
                
    <Name>Chicago Zoo</Name>
                
    <Address>23 Zebra Ave</Address>
                
    <City>Chicago</City>
                
    <State>IL</State>
          
    </ZooTable>
          
    <ZooTable>
                
    <Name>Hungry Zoo</Name>
                
    <Address>45 Lion st</Address>
                
    <City>Miami</City>
                
    <State>FL</State>
                
    <Zip>33122</Zip>
          
    </ZooTable>
    </ZooRoot>

     二、使用xmlhelper

    1. 创建一个xml文档,并在文档中创建根节点

    XmlDocument doc = XmlHelper.CreateXmlDocument();
    XmlNode newNode = doc.CreateElement("ZooRoot");
    XmlNode rootNode = doc.AppendChild(newNode);

    2. 接下来创建整个用属性表示的文档

        ///

        /// First Row

        /// 

        newNode = doc.CreateElement("ZooTable");
        XmlHelper.CreateAttribute(newNode, "Name", "Crazy Zoo");
        XmlHelper.CreateAttribute(newNode, "Address", "32 Turtle Lane");
        XmlHelper.CreateAttribute(newNode, "City", "Austin");
        XmlHelper.CreateAttribute(newNode, "State", "TX");
        XmlHelper.CreateAttribute(newNode, "Zip", "12345");

        rootNode.AppendChild(newNode);

        ///

        /// Second Row

        /// 

        newNode = doc.CreateElement("ZooTable");
        XmlHelper.CreateAttribute(newNode, "Name", "Chicago Zoo");
        XmlHelper.CreateAttribute(newNode, "Address", "23 Zebra Ave");
        XmlHelper.CreateAttribute(newNode, "City", "Chicago");
        XmlHelper.CreateAttribute(newNode, "State", "IL");

        rootNode.AppendChild(newNode);

        ///

        /// Third Row

        /// 

        newNode = doc.CreateElement("ZooTable");
        XmlHelper.CreateAttribute(newNode, "Name", "Hungry Zoo");
        XmlHelper.CreateAttribute(newNode, "Address", "45 Lion st");
        XmlHelper.CreateAttribute(newNode, "City", "Miami");
        XmlHelper.CreateAttribute(newNode, "State", "FL");
        XmlHelper.CreateAttribute(newNode, "Zip", "33122");

        rootNode.AppendChild(newNode);

    3. Xpath 的查询

    3.1 查找单个元素

        string xpathQuery = "/ZooRoot/ZooTable[@Name='Chicago Zoo']";
        XmlNode selectedNode = doc.SelectSingleNode(xpathQuery);

    基于属性的查找

        string xpathQuery = "/ZooRoot/ZooTable/Name='Chicago Zoo'";
        XmlNode selectedNode = doc.SelectSingleNode(xpathQuery);

    基于元素值的查找

        string xpathQuery = 
          "/ZooRoot/ZooTable/Name='Chicago Zoo' and @City=’Chicago’";
        XmlNode selectedNode = doc.SelectSingleNode(xpathQuery);

    可以是有多个条件

    3.2 返回多条记录

        string xpathQuery = 
          "/ZooRoot/ZooTable/[@Name='Chicago Zoo']/Classification";
        XmlNodeList nodeList = doc.SelectNodes(xpathQuery);
        string xpathQuery = 
          "/ZooRoot/ZooTable/[@Name='Chicago Zoo']/child::*";
        XmlNodeList nodeList = doc.SelectNodes(xpathQuery);

     4 在已存的XML文件节点中插入新节点

     string xpathQuery = "/ZooRoot/ZooTable";
        XmlNodeList nodeList = doc.SelectNodes(xpathQuery);

    然后使用foreach遍历

        int index = 0;
        foreach (XmlNode nodeFromList in nodeList)
        {
            ///

            /// each 'nodeFromList' is going to 

            /// be the parent node to which

            /// we need to add the 'Classification' child nodes

            ///

            foreach (string classificationName in classificationData[index])
            {
                newNode = doc.CreateElement("Classification");
                XmlHelper.CreateAttribute(newNode, "Type", 
                                          classificationName);
                nodeFromList.AppendChild(newNode);
            }
            index++;
        }

    5. 在现存的节点中修改属性值

        XmlNodeList nodeList = doc.SelectNodes(
           "/ZooRoot/ZooTable/Classification[@Type='Primates']");
        foreach (XmlNode node in nodeList)
        {
            XmlHelper.SetAttributeValue(node, "Type", "Monkeys");
        }

    6. 复制一个同类型节点,并修改为新的值

        ///

        /// Get Access to the node that we need to copy

        ///

        XmlNode nodeToCopy = doc.SelectSingleNode(
                  "/ZooRoot/ZooTable[@Name='Chicago Zoo']");
       
        ///

        /// Copy the node

        ///

        
        //true means that child nodes will be copied as well

        XmlNode newNode = doc.ImportNode(nodeToCopy, true);  

        ///

        /// Change the attributes that are different

        ///

        XmlHelper.SetAttributeValue(newNode, "Name", "New York Zoo");
        XmlHelper.SetAttributeValue(newNode, "Address", 
                                               "235 Congestion Ave");
        XmlHelper.SetAttributeValue(newNode, "City", "New York");
        XmlHelper.SetAttributeValue(newNode, "State", "NY");
        XmlHelper.SetAttributeValue(newNode, "Zip", "44444");

        ///

        /// Add child node. Note that the new node 

        /// shares the same parent as the node

        /// we are copying from, so we might as well 

        /// access the parent node from the node

        /// that we are copying from.

        ///

        nodeToCopy.ParentNode.AppendChild(newNode);

    7. 复制属性值

        ///

        /// Create a new node and set its attributes

        ///

        XmlNode newNode = doc.CreateElement("ZooTable");
        XmlHelper.CreateAttribute(newNode, "Name", "New York Zoo");
        XmlHelper.CreateAttribute(newNode, "Address", 
                                             "235 Congestion Ave");
        XmlHelper.CreateAttribute(newNode, "City", "New York");
        XmlHelper.CreateAttribute(newNode, "State", "NY");
        XmlHelper.CreateAttribute(newNode, "Zip", "44444");

        /// Get Access to the node that we need to copy

        ///

        XmlNode nodeToCopy = doc.SelectSingleNode(
                     "/ZooRoot/ZooTable[@Name='Chicago Zoo']");

        ///

        /// Copy all the attributes of the child nodes

        ///

        foreach (XmlNode childNode in nodeToCopy.ChildNodes)
        {
            XmlNode newChildNode = doc.CreateElement("Classification");
            XmlHelper.CreateAttribute(newChildNode, "Type", "");
            XmlHelper.CopyAttribute(childNode, newChildNode, "Type");
            newNode.AppendChild(newChildNode);
        }

        ///

        /// Add child node. Note that the new node 

        /// shares the same parent as the node

        /// we are copying from, so we might as well 

        /// access the parent node from the node

        /// that we are copying from.

        ///

        nodeToCopy.ParentNode.AppendChild(newNode);

    8. 作为datatable的数据源

    8.1 将xmlNodeList转换为Datatable

    XmlHelper.GetDataTable( XmlNodeList nodelist )

    8.2 将xmlNodeList转换为Datatable,并设置一列为主键

    XmlHelper.GetDataTable( XmlNodeList nodelist, 
                    string primaryKeyColumn, bool autoIncrement)

    8.3 将xml从datatable到nodelist的更新

    XmlHelper.UpdateChildNodesWithDataTable(XmlNode parentNode, 
                                DataTable table, string keyField)

    8.4 将datarow中的数据作为属性复制到一个xmlnode中

    XmlHelper.CopyAttributes(DataRow fromRow, XmlNode toNode)

    8.5 返回一个属性数组,对应二维表中的一列

    XmlHelper.GetAttributeArray(XmlNodeList nodeList, string attributeName)
        XmlNodeList nodeList = doc.SelectNodes("/ZooRoot/ZooTable");
        this.lstZoos.DataSource = 
            XmlHelper.GetAttributeArray(nodeList, "Name");

    以上是将某一列作为某个listbox控件的数据源的示例

        XmlNodeList nodeList = doc.SelectNodes("/ZooRoot/ZooTable");
        this.grdZoos.DataSource = XmlHelper.GetDataTable(nodeList);

    以上对将多条数据(nodelist)作为datagrid控件的数据源

    从datatable更新xml的示例

        ///

        /// Get access to the DataTable that was modified in DataGrid

        ///

        DataTable table = (DataTable)this.grdZoos.DataSource;

        ///

        /// Get access to the parent node whose child are 

        /// part of the datatable

        ///

        XmlNode parentNode = doc.SelectSingleNode("/ZooRoot");

        ///

        /// Update the XmlDocument with changes made on DataGrid

        ///

        XmlHelper.UpdateChildNodesWithDataTable(parentNode, 
                                                  table, "Name");

    8.6 从一个xml节点导入到另一个xml节点

        ///

        /// Create a master XmlDocument that will organize data by Country

        ///

        XmlDocument docMaster = XmlHelper.CreateXmlDocument();
        XmlNode newNode = docMaster.CreateElement("root");
        XmlNode rootNode = docMaster.AppendChild(newNode);

        newNode = docMaster.CreateElement("Country");
        XmlHelper.CreateAttribute(newNode, "Name", "USA");
        XmlNode usaRoot = rootNode.AppendChild(newNode);

        ///

        /// Select the nodes to be imported

        ///

        XmlNodeList nodeList = doc.SelectNodes("/ZooRoot/ZooTable");

        ///

        /// Import nodes

        ///

        foreach (XmlNode sourceNode in nodeList)
        {
            newNode = docMaster.ImportNode(sourceNode, true);
            usaRoot.AppendChild(newNode);
        }
       
        this.txtQueryResults.Text = XmlHelper.DocumentToString(docMaster);

    9. xmlhelper的调试

    XmlHelper.DocumentToString 和 XmlHelper.NodeToString 这两个方法通常用来调试。

    Trace.WriteLine(XmlHelper.NodeToString(currentNode))

    10. Insert方法

    XmlHelper.Insert(XmlDocument doc, string xpath)
    XmlHelper.Insert(XmlDocument doc, 
    string xpath, 
                                
    string[] fields, string[] values)
    XmlHelper.Insert(XmlDocument doc, 
    string xpath, 
                                    NameValueCollection nameValuePairs) 

     System.Collections.Specialized.NameValueCollection

    XmlHelper.Insert(XmlDocument doc, string xpath, DataRow rowValues)

    XmlHelper.Insert(XmlDocument doc, 
    string xpath, DataTable table)

       ///

        
    /// Create the XmlDocument and specify name of the root node

        
    ///

        doc 
    = XmlHelper.CreateXmlDocument("ZooRoot");

        
    ///

        
    /// First Row

        
    ///

        
    string[] fields = new string[] 
           {
    "Name""Address""City""State""Zip"};
        
    string[] values = new string[] 
           {
    "Crazy Zoo""32 Turtle Lane""Austin""TX""12345"};
        XmlHelper.Insert(doc, 
    "ZooTable", fields, values);

        
    ///

        
    /// Second Row (Zip is missing)

        
    ///

        
    string[] fields2 = new string[] 
           {
    "Name""Address""City""State"};
        values 
    = new string[]
           {
    "Chicago Zoo""23 Zebra Ave""Chicago""IL"};
        XmlHelper.Insert(doc, 
    "ZooTable", fields2, values);

        
    ///

        
    /// Third Row

        
    ///

        values 
    = new string[] 

           {"Hungry Zoo", "45 Lion st", "Miami", "FL", "33122"};

            XmlHelper.Insert(doc, "ZooTable", fields, values); 

        ///

        
    /// Insert Classification Data

        
    ///

        values 
    = new string[]{"Reptiles""Birds""Primates"};
        XmlHelper.Insert(doc, 
          
    "ZooTable[@Name='Crazy Zoo']/Classification""Type", values);

        values 
    = new string[] {"Fish""Mammals""Primates"};
        XmlHelper.Insert(doc, 
          
    "ZooTable[@Name='Chicago Zoo']/Classification""Type", values);

        values 
    = new string[] {"Arachnids""Rodents"};
        XmlHelper.Insert(doc, 
          
    "ZooTable[@Name='Hungry Zoo']/Classification""Type", values);

    11. Update方法

    XmlHelper.Update(doc, 
        
    "ZooTable/Classification[@Type='Primates']""Type""Monkeys");

    12. Delete方法

     XmlHelper.Delete(XmlDocument doc, string xpath)
     XmlHelper.Delete(XmlDocument doc, 
    string xpath, string field)

    13. Query方法,返回一个datatable

    XmlHelper.Query(XmlDocument doc, string xpath)
    XmlHelper.QueryScalar(XmlDocument doc, 
    string xpath, string field)
    XmlHelper.QueryField(XmlDocument doc, 
    string xpath, string field) 

  • 相关阅读:
    图片一句话木马简单制作方法
    kali各工具使用介绍
    隐写工具zsteg安装及使用教程
    内网渗透中mimikatz的使用
    kali meterpreter中mimikatz模块获取密码
    一个恐怖份子上传了这张照片到社交网络。里面藏了什么信息?
    攻防世界MISC进阶之签到题
    EMC存储重装系统分区丢失恢复方法
    服务器数据迁移方法
    教您分辨U盘不能识别是哪儿坏了
  • 原文地址:https://www.cnblogs.com/somesongs/p/xmlhelper.html
Copyright © 2020-2023  润新知