加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

c#将一个xml文件内的节点复制到另一个xml文件内

(2015-07-31 21:15:06)
标签:

c

文件

插入

xml节点

分类: 代码天地

c#将一个xml文件内的节点复制到另一个xml文件内

 

1 调用方式: 

read_write("c:\\child.xml", "c:\\parent.xml");

 

2 函数实现:

using System.Xml;

    public void read_write(string xml_in_file, string xml_out_file)
        {
            try
            {
                //in xml
                XmlDocument doc_in = new XmlDocument();
                doc_in.Load(xml_in_file);
                if (!doc_in.HasChildNodes)
                {
                    return;
                }
                XmlNodeList root_node_in = doc_in.getElementsByTagName_r("object");//节点名字肯定都有
                XmlNode xml_in = root_node_in.Item(0);
                XmlElement xe_in = (XmlElement)xml_in;
                string str_in_id = xe_in.GetAttribute("id");


                //out xml
                XmlDocument doc_out = new XmlDocument();
                doc_out.Load(xml_out_file);
                if (!doc_out.HasChildNodes)
                {
                    return;
                }
                XmlNodeList root_node_out = doc_out.getElementsByTagName_r("object_set");
                XmlNode xml_out = root_node_out.Item(0);
                XmlElement xe_out = (XmlElement)xml_out;
                string str_out_id = xe_out.GetAttribute("id");
                XmlElement xe_del = (XmlElement)xml_out.ChildNodes[0];// xe_out;
                //如果有该节点,先删除,再插入,比修改方便
                DeleteNode(xe_out.ChildNodes,"","id", xe_in.GetAttribute("id"));
                XmlNode new_node = doc_out.ImportNode(xe_in, true);
                xe_out.A(new_node);
                doc_out.Save(xml_out_file);
//也可以创建一个名称节点,  new_node =doc_out.createElement_x("Content"); 

//然后逐个设置属性和字节点,new_node.SetAttribute(dest_attr_name, att_value);
            }

            catch (Exception e)
            {
                throw e;
            }
        }

 

        ///
        /// 删除节点
        ///
        public void DeleteNode(XmlNodeList xnl, string node_name = "", string attribute_name = "", string attribute_value = "")
        {
            //xmlDoc =new XmlDocument();
            //xmlDoc.Load("bookshop.xml"); //加载xml文件
            //XmlNodeList xnl = xmlDoc.SelectSingleNode("bookshop").ChildNodes;

            //     XDocument xDoc_in = XDocument.Load(xml_out_file);
            //     var Conditions = xDoc_in.Descendants("object");//直接找子节点

            foreach (XmlNode xn in xnl)
            {
                XmlElement xe = (XmlElement)xn;
               if (node_name != "" && attribute_name != "" )
               {
                    // xe.RemoveAttribute("id");//删除id属性
                   if (xe.Name == node_name && xe.GetAttribute(attribute_name) == attribute_value)
                   {
                       //xe.RemoveAll();//删除该节点的全部内容 
                       xe.ParentNode.RemoveChild(xe);

                       break;
                   }
                }
                else if (node_name != "" && xe.Name == node_name)
                {
                    xe.ParentNode.RemoveChild(xe);
                    break;
                }
                else if (attribute_name != "" && xe.GetAttribute(attribute_name) == attribute_value)
                {
                    xe.ParentNode.RemoveChild(xe);

                    break;
                }
            }
        }

3 附录 两个xml文件内容

 使用中文的尖括号 <>  代替英文的,防止删除

 3.1 child.xml ,只有一个节点w2

 

<object id="w2BLO_Tran" parent="Purchase">
  <property name="Target">
    <object type="Purchase.Service.Implement.w2BLO, Business.Purchase" >
     <property name="IDAO" ref="w2DAO" />
     <property name="w2DAO" ref="w2DAO" />
    </object>
  </property>
</object>

 

 

 3.2 parent.xml  有很多节点,将上面的节点w2加入后为

<object_set>


<object id="w1BLO_Tran" parent="Purchase">
  <property name="Target">
    <object type="Purchase.Service.Implement.wzBLO, Business.Purchase" >
     <property name="IDAO" ref="w1DAO" />
     <property name="wzDAO" ref="w1DAO" />
    </object>
  </property>
</object>
  
<object id="w2BLO_Tran" parent="Purchase">
  <property name="Target">
    <object type="Purchase.Service.Implement.w2BLO, Business.Purchase" >
     <property name="IDAO" ref="w2DAO" />
     <property name="w2DAO" ref="w2DAO" />
    </object>
  </property>
</object>


</object_set>

 

 

 

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有