使用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();