向各位请教一下,如何动态生成xml文件?如果可以的话,麻烦把代码贴出来,谢谢了!

解决方案 »

  1.   

    你打算如何动态?
    简单点:拼接或模板的替换,这和拼接SQL一样,你想怎么弄就怎么弄。
    复杂的,你可以使用
    XmlDocument,然后在各个node上通过AppendChild这样的方式来操作。
      

  2.   


       static void Main(string[] args)
            {            XmlDocument doc = new XmlDocument();
                var node = doc.CreateElement("Books");
                doc.AppendChild(node);            for (int i = 0; i < 10; i++)
                {
                    var n = doc.CreateElement("Book");
                    node.AppendChild(n);
                }            doc.Save(@"E:\desktop\test.xml");
             }这段代码,先生成一个文档对象,然后写入了Books文档根对象,然后循环10次写入了Book对象,你想要动态,这里就可以了。
      

  3.   

    你可以用stringbuild 拼接
     StringBuilder sb = new StringBuilder();
                                sb.Append(@"<?xml version=""1.0"" encoding=""UTF-8""?>");
                                sb.Append(Environment.NewLine);
                                sb.Append("<Classes>");
                                sb.Append(Environment.NewLine);。。
    也可以用 XmlTextWriter 写:
     xtw.WriteStartElement("C");                    xtw.WriteAttributeString("ClassID", dr[i]["cID"].ToString());
                        xtw.WriteAttributeString("Name", dr[i]["cName"].ToString());                      
                        xtw.WriteEndElement();
    这是一些部分代码,你看下吧!
      

  4.   

    using System.Xml;
    using System.IO;/// <summary>
    /// XMLProc 的摘要说明
    /// 将数据写入XML文件的方法
    /// SaveXML_DataSet()利用DataSet写入XML文件
    /// SaveXML_XmlTextWriter()利用XmlTextWriter写入XML文件
    /// SaveXML_XmlNode()利用XmlNode写入XML文件
    /// 
    /// 从XML文件中读取数据
    /// GetXML_XmlTextReader()
    /// GetXML_XmlNodeReader()
    /// </summary>
    public class XMLProc
    {
    public XMLProc()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    }
        ///<summary>
        /// 利用XmlTextWriter不容易实现追加,也就是说每次写入XML文档的数据都是覆盖式的,不容易实现在原有数据的基础上追加数据,
        /// 而采用XmlNode模式就能方便地实现数据追加
        /// 利用DataSet也不是追加数据
        ///</summary>
        
        //利用DataSet把数据写入XML文件,不实现追加
        public static string SaveXML_DataSet(BaseInfo.Phonebook pb)
        {
            try
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("name", Type.GetType("System.String"));
                dt.Columns.Add("telphone", Type.GetType("System.String"));
                dt.Columns.Add("qq", Type.GetType("System.String"));
                dt.Columns.Add("msn", Type.GetType("System.String"));
                dt.Columns.Add("cellphone", Type.GetType("System.String"));
                dt.Columns.Add("workplace", Type.GetType("System.String"));
                dt.Columns.Add("address", Type.GetType("System.String"));
                dt.Columns.Add("email", Type.GetType("System.String"));            DataRow dr = dt.NewRow();
                dr[0] = pb.name;
                dr[1] = pb.telphone;
                dr[2] = pb.qq;
                dr[3] = pb.msn;
                dr[4] = pb.cellphone;
                dr[5] = pb.workplace;
                dr[6] = pb.address;
                dr[7] = pb.email;            dt.Rows.Add(dr);
                System.Data.DataSet ds = new DataSet();
                ds.Tables.Add(dt);            //将DataSet里面的数据写入XML
                ds.WriteXml(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));
                
                return "true";
            }
            catch(Exception ex)
            {
                return ex.ToString();
            }
        }    
        //利用xmlTextWriter往XML文件写入数据,没有实现追加
        public static string SaveXMLData_XmlTextWriter(BaseInfo.Phonebook pb)
        {
            try
            {
                //创建一个XmlTextWriter类的实例对象
                System.IO.FileInfo file = new FileInfo(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));
                //if (!file.Exists)
              
                XmlTextWriter textWriter = new XmlTextWriter(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"), System.Text.Encoding.UTF8);
                
                //开始写过程,调用WriterStartDocument方法写入文件头信息
                //例如<?xml version="1.0" encoding="utf-8"?>
                textWriter.WriteStartDocument();            //写入根节点<phonebook></phonebook>
                textWriter.WriteStartElement("phonebook");
                textWriter.WriteStartElement("member");            //写入节点name
                textWriter.WriteStartElement("name", "");
                //为name节点写入用户输入的值
                textWriter.WriteString(pb.name);
                //写入name节点的结束符
                textWriter.WriteEndElement();            textWriter.WriteStartElement("telphone", "");
                textWriter.WriteString(pb.telphone);
                textWriter.WriteEndElement();            textWriter.WriteStartElement("qq", "");
                textWriter.WriteString(pb.qq);
                textWriter.WriteEndElement();            textWriter.WriteStartElement("msn", "");
                textWriter.WriteString(pb.msn);
                textWriter.WriteEndElement();            textWriter.WriteStartElement("cellphone", "");
                textWriter.WriteString(pb.cellphone);
                textWriter.WriteEndElement();            textWriter.WriteStartElement("workplace", "");
                textWriter.WriteString(pb.workplace);
                textWriter.WriteEndElement();            textWriter.WriteStartElement("address", "");
                textWriter.WriteString(pb.address);
                textWriter.WriteEndElement();            textWriter.WriteStartElement("email", "");
                textWriter.WriteString(pb.email);
                textWriter.WriteEndElement();            //写入文档结束,调用WriteEndDocument方法
                textWriter.WriteEndDocument();            //关闭textWriter
                textWriter.Close();            return "true";        
            }
            catch (Exception ex)
            {
                return ex.ToString();
            }
        }
        
      

  5.   

    //利用XmlNode往XML文件写入数据,可以实现追加
        public static string SaveXMLData_XmlNode(BaseInfo.Phonebook pb)
        {
            try
            {
                //创建一个XmlDocument 对象,用于载入存储信息的XML文件
                System.Xml.XmlDocument xdoc = new XmlDocument();
                xdoc.Load(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));
                //创建一个menber节点并将它添加到根节点下
                XmlElement parentNode = xdoc.CreateElement("member");
                xdoc.DocumentElement.PrependChild(parentNode);
                //创建所有用于存储信息的节点
                XmlElement nameNode = xdoc.CreateElement("name");
                XmlElement telphoneNode = xdoc.CreateElement("telphone");
                XmlElement qqNode = xdoc.CreateElement("qq");
                XmlElement msnNode = xdoc.CreateElement("msn");
                XmlElement cellphoneNode = xdoc.CreateElement("cellphone");
                XmlElement workplaceNode = xdoc.CreateElement("workplace");
                XmlElement addressNode = xdoc.CreateElement("address");
                XmlElement emailNode = xdoc.CreateElement("email");            ///获取文本信息
                XmlText nameText = xdoc.CreateTextNode(pb.name);
                XmlText telphoneText = xdoc.CreateTextNode(pb.telphone);
                XmlText qqText = xdoc.CreateTextNode(pb.qq);
                XmlText msnText = xdoc.CreateTextNode(pb.msn);
                XmlText cellphoneText = xdoc.CreateTextNode(pb.cellphone);
                XmlText workplaceText = xdoc.CreateTextNode(pb.workplace);
                XmlText addressText = xdoc.CreateTextNode(pb.address);
                XmlText emailText = xdoc.CreateTextNode(pb.email);            ///将上面的各个存储信息节点添加到menber节点下,但并不包含最终的值
                parentNode.AppendChild(nameNode);
                parentNode.AppendChild(telphoneNode);
                parentNode.AppendChild(qqNode);
                parentNode.AppendChild(msnNode);
                parentNode.AppendChild(cellphoneNode);
                parentNode.AppendChild(workplaceNode);
                parentNode.AppendChild(addressNode);
                parentNode.AppendChild(emailNode);            ///将上面获取的文本信息添加到与之相对应的节点中
                nameNode.AppendChild(nameText);
                telphoneNode.AppendChild(telphoneText);
                qqNode.AppendChild(qqText);
                msnNode.AppendChild(msnText);
                cellphoneNode.AppendChild(cellphoneText);
                workplaceNode.AppendChild(workplaceText);
                addressNode.AppendChild(addressText);
                emailNode.AppendChild(emailText);            ///保存存储信息的XML文件
                xdoc.Save(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));            return "true";
            }
            catch (Exception ex)
            {
                return ex.ToString();
            }
        }    //XmlTextReader类实现的查找程序
        public static string GetXML_XmlTextReader(string keyName)
        {
            //XMLTextReader读取XML文件
            XmlTextReader xmltextreader = new XmlTextReader(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));
            if (keyName == "")
            {
                string outMsg = "";
                string currentNodeName = "";
                int i = 1;
                //利用xmltextreader对象的Read()方法循环读取文件的节点
                while (xmltextreader.Read())
                {
                    //当节点类型是元素的时候,记录该节点名称
                    if (xmltextreader.NodeType == System.Xml.XmlNodeType.Element)
                    {
                        currentNodeName = xmltextreader.LocalName.ToString();
                    }
                    if (xmltextreader.NodeType == System.Xml.XmlNodeType.Text)
                    {
                        //把这个人的属性组织成文本串,便天页面输出
                        outMsg += "<tr bgColor=#fff5b1><td>" + currentNodeName + "</td><td>" + xmltextreader.Value + "</td></tr>";
                    }
                    if (xmltextreader.NodeType == System.Xml.XmlNodeType.Element && xmltextreader.LocalName.Equals("member"))
                    {
                        outMsg += "<tr><td>联系人:</td><td><font color=red>(" + (i++) + ")</font></td></tr>";
                    }
                }
                outMsg = "<table>" + outMsg + "</table>";
                //关闭xmltextreader
                xmltextreader.Close();            //显示联系人的详细信息
                //Response.Write(outMsg);
                return outMsg;
            }
            else
            {
                //XmlTextReader xmltextreader = new XmlTextReader(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));
                bool findflag = false;
                string outMsg = "<table><tr><td collspan=2><font color=red>已经查找到下列联系人:</font></td></tr>";
                string currentNodeName = "";
                //利用xmltextreader对象的Read()方法自我表现读取文件的节点
                while (xmltextreader.Read())
                {
                    //当找到了要查找的人,并且当前节点为元素,并且节点名称为"member"时退出循环
                    if (findflag == true && xmltextreader.NodeType == System.Xml.XmlNodeType.Element && xmltextreader.LocalName.Equals("member"))
                    {
                        break;
                    }
                    //当节点类型是元素的时候,记录该节点名称
                    if (xmltextreader.NodeType == System.Xml.XmlNodeType.Element)
                    {
                        currentNodeName = xmltextreader.LocalName.ToString();
                    }
                    //还没有查找到指定的人,并且当前节点类型为文本,并且当前节点的节点值与要查找的人符合时
                    if ((findflag == false) && (xmltextreader.NodeType == System.Xml.XmlNodeType.Text) && (xmltextreader.Value == keyName))//当为文本类型同时对应的值为要查找的人的时候
                    {
                        findflag = true;//设置找到了要查找的人的标志
                    }
                    //如果已经找到,并且当前节点类型为文本时,循环记录这个人的所有信息
                    if (findflag == true && xmltextreader.NodeType == System.Xml.XmlNodeType.Text)
                    {
                        outMsg += "<tr bgcolor=#fff5b1><td align=right>" + currentNodeName + ":</td><td>" + xmltextreader.Value + "</td></tr>";
                    }
                    //如果已经找到了这个人,同时Xtr当前为文本类型,那么
                }
                //关闭xmltextreader
                xmltextreader.Close();
                outMsg += "</table>";            //显示查找的人的详细信息
                //Response.Write(outMsg);
                return outMsg;
            }
        }
        //利用XmlNodeReader实现查找的程序
        public static string GetXML_XmlNodeReader(string keyName)
        {
            XmlDocument xml = new XmlDocument();
            bool findNode = false;        try
            {
                xml.Load(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));
            }
            catch
            { }        XmlNodeReader read = new XmlNodeReader(xml);
            while (read.Read())
            {
                if (read.NodeType == System.Xml.XmlNodeType.Element && read.LocalName.ToString().Equals(keyName))
                {
                    read.Read();
                    if (read.NodeType == System.Xml.XmlNodeType.Text)
                    {
                        //Response.Write(read.Value);
                        return read.Value;
                        //break;
                    }
                }
            }
            return "";
        }
    }
      

  6.   

    几种对XML操作的方法例子,自己整理的
      

  7.   

    有没有在前台页面用javascript进行写入xml呢?
      

  8.   

    请各位高手指点如何用windform程序把数据库数据生成xml
      

  9.   

    请问各位高手,如何用JSP动态生成XML