C# 处理XML

使用XMLReader

        private void button1_Click(object sender, EventArgs e)
        {
            richTextBox1.Clear();
            XmlReader xmlReader = XmlReader.Create("books.xml");
            while (xmlReader.Read())
            {
                if (xmlReader.NodeType == XmlNodeType.Text)
                {
                    this.richTextBox1.AppendText(xmlReader.Value + "\r\n");
                }
            }
        }

遍历文档:Read()方法可以进入下一个节点,然后验证该节点是否有值 。ReadStartElement()验证该节点是否是起始元素,如果是起始元素,就定位到下一个节点,如果不是就引发一个XmlException异常。

        private void button1_Click(object sender, EventArgs e)
        {
            richTextBox1.Clear();
            XmlReader xmlReader = XmlReader.Create("books.xml");
            while(!xmlReader.EOF)
            {
                if(xmlReader.MoveToContent()==XmlNodeType.Element&&xmlReader.Name=="title")
                {
                    this.richTextBox1.AppendText(xmlReader.ReadElementString() + "\r\n");
                }
                else
                {
                    xmlReader.Read();
                }
            }
        }

XmlReader类还可以读取强类型化数据,它有几个ReadElementContentAs()方法

            richTextBox1.Clear();
            XmlReader xmlReader = XmlReader.Create("books.xml");
            while(xmlReader.Read())
            {
                if(xmlReader.Name=="price")
                {
                    decimal price = xmlReader.ReadElementContentAsDecimal();
                    richTextBox1.AppendText("Current price" + price + "\r\n");
                    price += price * (decimal).25;
                    richTextBox1.AppendText("New price" + price + "\r\n\r\n");
                }
                else if(xmlReader.Name == "title")
                {
                    richTextBox1.AppendText(xmlReader.ReadElementContentAsString() + "\r\n");
                }
            }

使用XmlWriter类

            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            settings.NewLineOnAttributes = true;

            XmlWriter writer = XmlWriter.Create("newbook.xml", settings);
            writer.WriteStartDocument();
            writer.WriteStartElement("book");
            writer.WriteAttributeString("genre", "Mystery");
            writer.WriteAttributeString("publicationdate", "2001");
            writer.WriteAttributeString("ISBN", "123456789");
            writer.WriteElementString("title", "case of the missing cookie");
            writer.WriteStartElement("author");
            writer.WriteElementString("name", "cookie monster");
            writer.WriteEndElement();
            writer.WriteElementString("price", "9.99");
            writer.WriteEndElement();
            writer.WriteEndDocument();

            writer.Flush();
            writer.Close();

System.Xml.XPath

            XPathDocument doc = new XPathDocument("books.xml");
            XPathNavigator nav = ((IXPathNavigable)doc).CreateNavigator();

            XPathNodeIterator iter = nav.Select("/bookstore/book[@genre='novel']");
            textBox1.Text = "";
            while(iter.MoveNext())
            {
                XPathNodeIterator newIter = 
                    iter.Current.SelectDescendants(XPathNodeType.Element, false);
                while(newIter.MoveNext())
                {
                    textBox1.Text += newIter.Current.Name + ":" +
                        newIter.Current.Value + "\r\n";
                }

            }

System.Xml.Xsl

            XslCompiledTransform trans = new XslCompiledTransform();
            WebBrowser webBrowser1 = new WebBrowser();
            trans.Load("books.xsl");
            trans.Transform("books.xml", "out.html");
            webBrowser1.Navigate(AppDomain.CurrentDomain.BaseDirectory + "out.html");

把XML转换为DataSet

            DataSet ds = new DataSet("XMLProducts");
            ds.ReadXml("Products.xml");

            DataGrid dataGrid1 = new DataGrid();
            dataGrid1.DataSource = ds.Tables[0];

            textBox1.Text = "";

            foreach(DataTable dt in ds.Tables)
            {
                textBox1.Text = dt.TableName + "\r\n";
                foreach(DataColumn col in dt.Columns)
                {
                    textBox1.Text = "t" + col.ColumnName + "-" + col.DataType.FullName + "\r\n";
                }
            }

在XML中序列化对象

XmlSerializer类的Serialize()方法实际上执行序列化 

            TextWriter tr = new StreamWriter("serialprod.xml");
            XmlSerializer sr = new XmlSerializer(typeof(Product));
            sr.Serialize(tr, pd);
            tr.Close();
            WebBrowser webBrowser = new WebBrowser();
            webBrowser.Navigate(AppDomain.CurrentDomain.BaseDirectory + "serialprod.xml");

Product类 要序列化的类,添加了C#特性。

反序列读取XML

            FileStream fs = new FileStream("serialprod.xml", FileMode.Open);
            XmlSerializer sr = new XmlSerializer(typeof(Product));
            newPd = (Product)sr.Deserialize(fs);
            fs.Close();

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值