当前位置:编程学习 > C#/ASP.NET >>

XmlDocument 是否可以写出这样格式的XML~~

<?xml version="1.0" encoding="utf-8"?>
<abc Id="aaaa" Description="bbbb" >
<sxd Id="bbbbb" Description="bbbbb">
</sxd >
</abc >

如过能写该如何写(从创建->写入) --------------------编程问答-------------------- 忘说了`非序列化 --------------------编程问答-------------------- 用XmlWriter. --------------------编程问答--------------------


 using System;
 using System.Xml;
 13namespace BH.XmlClass
 14{ 
     public class XmlItem
 20    {
 21        //存放孙结点名称的数组,调用时传入参数初始化孙结点
 22        public string[] GrandsonNode;
 23        //存放孙结点值的数组
 24        public string[] GrandsonNodeValue;
 25        //public string Name;        //子结点
 26        //public string Url;        //子结点
 27        //public string Img;        //子结点
 28        //public string Address;    //子结点
 29        
 30        public string XmlPath;    //要操作的xml文件路径(绝对路径或相对路径都可以)
 31        public string RootNode; //根结点名称
 32        public bool IsRootAttribute; //根结点是否有属性
 33        
 34        //根结点属性名称
 35        public string[] RootAttribute;
 36        //根结点属性值
 37        public string[] RootAttributeValue;
 38        //public string Date;            //根结点属性
 39        //public string Author;        //根结点属性
 40        //public string Description;    //根结点属性
 41        public string ChildNode;    //根结点下的子结点名称
 42        
 43        /**//// <summary>
 44        /// 无参构造函数
 45        /// </summary>
 46        public XmlItem(){
 47            //TODO:无参构造函数
 48        }
 49        
 50        /**//// <summary>
 51        /// 初始化XML路径、根结点名称以及子结点名称的构造函数
 52        /// </summary>
 56        public XmlItem(string vXmlPath,string vRootNode,string vChildNode,bool vIsRootAttribute)
 57        {
 58            XmlPath = vXmlPath;
 59            RootNode = vRootNode;
 60            ChildNode = vChildNode;
 61            IsRootAttribute = vIsRootAttribute;
 62        }
 63        
 64        /**//// <summary>
 65        /// 初始化孙结点名称的构造函数
 66        /// </summary>
 67        /// <param name="vGrandsonNode">孙结点名称数组</param></param>
 68        public XmlItem(string[] vGrandsonNode){
 69            GrandsonNode = new string[vGrandsonNode.Length];
 70            for(int i=0;i < GrandsonNode.Length;i++){
 71                GrandsonNode[i] = vGrandsonNode[i];
 72            }
 73        }
 74        
 75        /**//// <summary>
 76        /// 初始化根结点属性名称的构造函数
 77        /// </summary>
 78        /// <param name="vRootAttribute">属性名称数组</param>
 79        public XmlItem(string[] vRootAttribute){
 80            RootAttribute = new string[vRootAttribute.Length];
 81            for(int i=0;i < RootAttribute.Length;i++){
 82                RootAttribute[i] = vRootAttribute[i]
 83            }
 84        }
 85    }
 86    #endregion
 87    
 88    /**////    <summary>
 89    /// 数据操作类,只能对简单的xml数据表结构操作
 90    /// XML文件原型:1、只有一个根结点。2、根结点可以带属性。
 91    ///     3、子结点标识必须相同。4、子结点和孙结点都不带属性
 92    /// </summary>
 93    public class XmlOprator
 94    {
 95        /**//// <summary>
 96        /// 添加一个新的XML结点
 97        /// </summary>
 98        /// <param name="vXmlItem">结点信息对象</param>
 99        public void AddXml(XmlItem vXmlItem)
100        {
101            XmlDocument XmlDoc = new XmlDocument();
102            XmlDoc.Load(vXmlItem.XmlPath);
103            //
104            //TODO:查找根结点
105            //
106            XmlNode root = XmlDoc.SelectSingleNode(vXmlItem.RootNode);
107            if(vXmlItem.IsRootAttribute){
108                //添加根结点属性
109                XmlElement xe = (XmlElement)root;
110                for(int i=0;i < vXmlItem.RootAttribute.Length;i++){
111                    xe.SetAttribute(vXmlItem.RootAttribute[i], vXmlItem.RootAttributeValue[i]);
112                }
113                //xe.SetAttribute("Date",vXmlItem.Date);
114                //xe.SetAttribute("Author",vXmlItem.Author);
115                //xe.SetAttribute("Description",vXmlItem.Description);
116            }
117            else
118            {
119                //添加根结点的子结点
120                XmlElement xe = XmlDoc.CreateElement(vXmlItem.ChildNode);
121                
122                for(int i=0;i < vXmlItem.GrandsonNode.Length;i++){
123                    XmlElement xeSub1 = XmlDoc.CreateElement(vXmlItem.GrandsonNode[i]);
124                    xeSub1.InnerText = vXmlItem.GrandsonNodeValue[i];
125                    xe.AppendChild(xeSub1);
126                }
127                
128                /**//*//xe的第一个子结点
129                XmlElement xeSub1 = XmlDoc.CreateElement("Name");
130                xeSub1.InnerText = vXmlItem.Name;
131                xe.AppendChild(xeSub1);
132                //xe的第二个子结点
133                XmlElement xeSub2 = XmlDoc.CreateElement("Url");
134                xeSub2.InnerText = vXmlItem.Url;
135                xe.AppendChild(xeSub2);
136                //xe的第三个子结点
137                XmlElement xeSub3 = XmlDoc.CreateElement("Img");
138                xeSub3.InnerText = vXmlItem.Img;
139                xe.AppendChild(xeSub3);
140                //xe的第四个子结点
141                XmlElement xeSub4 = XmlDoc.CreateElement("Address");
142                xeSub4.InnerText = vXmlItem.Address;
143                xe.AppendChild(xeSub4);*/
144                    
145                root.AppendChild(xe);
146                XmlDoc.Save(vXmlItem.XmlPath);
147            }
148        }
149        
150        /**//// <summary>
151        /// 编辑结点信息
152        /// </summary>
156        public void EditXml(XmlItem vXmlItem,int Index,string WhereStr)
157        {
158            XmlDocument XmlDoc = new XmlDocument();
159            XmlDoc.Load(vXmlItem.XmlPath);
160            
161            XmlNodeList xnl = XmlDoc.SelectSingleNode(vXmlItem.RootNode).ChildNodes;
162            foreach(XmlNode xn in xnl){
163                XmlElement xe = (XmlElement)xn;
164                if(xe.ChildNodes[Index].InnerText==WhereStr){
165                    for(int i=0;i < vXmlItem.GrandsonNode.Length;i++){
166                        xe.ChildNodes[i].InnerText = vXmlItem.GrandsonNodeValue[i];
167                    }
168                    /**//*xe.ChildNodes[0].InnerText = vXmlItem.Name;
169                    xe.ChildNodes[1].InnerText = vXmlItem.Url;
170                    xe.ChildNodes[2].InnerText = vXmlItem.Img;
171                    xe.ChildNodes[3].InnerText = vXmlItem.Address;*/
172                }
173            }
174            XmlDoc.Save(vXmlItem.XmlPath);
175        }
176        
177        /**//// <summary>
178        /// 删除XML指定结点,孙结点的索引作为条件
179        /// </summary>
180        /// <param name="vXmlItem">结点信息对象</param>
181        /// <param name="Index">孙结点的索引</param>
182        /// <param name="WhereStr">和索引对应的条件</param>
183        public void DeleteXml(XmlItem vXmlItem,int Index,string WhereStr)
184        {
185            XmlDocument XmlDoc = new XmlDocument();
186            XmlDoc.Load(vXmlItem.XmlPath);
187            
188            XmlNodeList xnl = XmlDoc.SelectSingleNode(vXmlItem.RootNode).ChildNodes;
189            //按照孙结点的索引循环查找指定结点删除
190            foreach(XmlNode xn in xnl){
191                XmlElement xe = (XmlElement)xn;
192                if(xe.ChildNodes[Index].InnerText==WhereStr){
193                    XmlDoc.SelectSingleNode(vXmlItem.RootNode).RemoveChild(xe);
194                }
195            }
196            XmlDoc.Save(vXmlItem.XmlPath);
197        }
198        
199        public void DeleteXml(XmlItem vXI,string vGrandsonNode,string WhereStr){
            XmlDocument XmlDoc = new XmlDocument();
            XmlDoc.Load(vXI.XmlPath);
            
            XmlNodeList xnl = XmlDoc.SelectSingleNode(vXI.RootNode).ChildNodes;                                       
foreach(XmlNode xn in xnl){
                XmlElement xe = (XmlElement)xn;
                if(xe.GetElementsByTagName(vGrandsonNode)[0].InnerText==WhereStr){
                    XmlDoc.SelectSingleNode(vXI.RootNode).RemoveChild(xe);
                }
            }
            XmlDoc.Save(vXI.XmlPath);
        }
    }
}

--------------------编程问答-------------------- 3楼方法 可以实现! --------------------编程问答-------------------- --------------------编程问答--------------------

            System.Xml.XmlWriter xw = System.Xml.XmlWriter.Create("C:\\t.xml");
            xw.WriteStartDocument();
            xw.WriteStartElement("abc");
            xw.WriteAttributeString("Id", "aaaa");
            xw.WriteAttributeString("Description", "bbbb");
            xw.WriteStartElement("sxd");
            xw.WriteAttributeString("Id", "bbbbb");
            xw.WriteAttributeString("Description", "bbbbb");
            xw.WriteEndElement();
            xw.WriteEndElement();
            xw.Close();
--------------------编程问答-------------------- xmlDocument读取查询的时候方便
写的话最好用XmlWriter
6楼的就可以 --------------------编程问答-------------------- 用XmlDocument来写大概是这样:

XmlDocument xd=new XmlDocument();
xd.Load("//你的测试XML文档");

XmlElement root=xd.CreateElement();
XmlElement sdx=xd.CreateElement();

XmlAttribute xa_rootid=xd.CreateAttribute();
XmlAttribute xa_rootdesc=xd.CreateAttribute();
XmlAttribute xa_sdxid=xd.CreateAttribute();
XmlAttribute xa_sdxdesc=xd.CretaeAttribute();

root.Name="abc";
root.InnerText="";

sdx.Name="sdx";

xa_rootid.Name="Id";
xa_rootid.Value="aaaa";
xa_rootdesc.Name="Description";
xa_rootdesc.Value="bbbb";

root.Attributes.Add(xa_rootid);
root.Attributes.Add(xa_rootdesc);

xa_sdxid.Name="Id";
xa_sdxid.Value="bbbbb";
xa_sdxdesc.Name="Description";
xa_sdxdesc.Value="bbbbb";

sdx.Attributes.Add(xa_sdxid);
sdx.Attributes.Add(xa_sdxdesc);

root.AppendChild(sdx);

xd.AppendChild(root);

//可见使用XmlDocument处理还是很烦的... --------------------编程问答-------------------- 我上面多写了xd.Load(//...); --------------------编程问答-------------------- xmlDocument的例子,可以参考一下: http://blog.csdn.net/cds27/archive/2008/04/18/2305166.aspx --------------------编程问答-------------------- 最后用xd.Save(//...)把写的东西从内存保存到,流或直接到硬盘上的文件. --------------------编程问答--------------------
System.Xml.XmlWriter xw = System.Xml.XmlWriter.Create("C:\\t.xml");
            xw.WriteStartDocument();
            xw.WriteStartElement("abc");
            xw.WriteAttributeString("Id", "aaaa");
            xw.WriteAttributeString("Description", "bbbb");
            xw.WriteStartElement("sxd");
            xw.WriteAttributeString("Id", "bbbbb");
            xw.WriteAttributeString("Description", "bbbbb");
            xw.WriteEndElement();
            xw.WriteEndElement();
            xw.Flush();
            xw.Close();
--------------------编程问答--------------------
引用 7 楼 ericzhangbo1982111 的回复:
xmlDocument读取查询的时候方便 
写的话最好用XmlWriter 
6楼的就可以
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,