using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
//关于XML的Demo
namespace XMLDemo
{
class Program
{
private static void Main(string[] args)
{
//AppendXML();
// XMLDocument xml
//RemoveChildNodeByAttribute();
Console.ReadLine();
}
#region "XML operation"
//用Linq操作XML
private static void RemoveChildNodeByAttribute()
{
XDocument xml = XDocument.Load(@"E:\books.xml");
XElement element = xml.Root.Element("book");
IEnumerable<XElement> xEle = from item in xml.Root.Descendants() where item.Attribute("category").Value == "children" select item;
XElement x = xEle.FirstOrDefault();
x.Remove();
xml.Save(@"E:\books_linq.xml");
}
//remove 完Node以后,需要Save当前的Document,否则不予以保存
private static void RemoveChildNode()
{
XmlDocument xml = new XmlDocument();
xml.Load(@"E:\books.xml");
var element = xml.GetElementsByTagName("book")[0];
xml.DocumentElement.RemoveChild(element);
//var x = xml.GetElementsByTagName("book")[0];
//x[0].RemoveAttribute("category");
//x.ParentNode.RemoveChild(x);
xml.Save(@"E:\books_update.xml");
}
private static string DataSetWriteToSpecialXML()
{
DataSet xmlDS = GetDataSet();
MemoryStream stream = null;
XmlTextWriter writer = null;
try
{
stream = new MemoryStream();
//从stream装载到XmlTextReader
writer = new XmlTextWriter(stream, Encoding.Unicode);
//用WriteXml方法写入文件.
xmlDS.WriteXml(writer);
int count = (int) stream.Length;
byte[] arr = new byte[count];
stream.Seek(0, SeekOrigin.Begin);
stream.Read(arr, 0, count);
UnicodeEncoding utf = new UnicodeEncoding();
return utf.GetString(arr).Trim();
}
catch (System.Exception ex)
{
throw ex;
}
finally
{
if (writer != null)
writer.Close();
}
}
private static void DataSetWriteToSpecialXML2()
{
DataSet xmlDS = GetDataSet();
MemoryStream stream = null;
XmlTextWriter writer = null;
try
{
stream = new MemoryStream();
//从stream装载到XmlTextReader
writer = new XmlTextWriter(stream, Encoding.Unicode);
//用WriteXml方法写入文件.
xmlDS.WriteXml(writer);
int count = (int) stream.Length;
byte[] arr = new byte[count];
stream.Seek(0, SeekOrigin.Begin);
stream.Read(arr, 0, count);
//返回Unicode编码的文本
var xmlFile = @"E:\data_translation3.xml";
UnicodeEncoding utf = new UnicodeEncoding();
StreamWriter sw = new StreamWriter(xmlFile);
sw.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
sw.WriteLine(utf.GetString(arr).Trim());
sw.Close();
}
catch (System.Exception ex)
{
throw ex;
}
finally
{
if (writer != null)
writer.Close();
}
}
private static void DataSetWriteToXML()
{
DataSet ds = GetDataSet();
XmlTextWriter xtw = new XmlTextWriter(@"E:/verify.xml", Encoding.GetEncoding("utf-8"));
xtw.WriteRaw("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
ds.WriteXml(xtw);
//ds.WriteXml(@"E:/verify.xml");
}
private static DataSet GetDataSet()
{
const string conStr = @"Provider=SQLOLEDB;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=JANE_UT_Dev;Data Source=CHNSHASV0002\SQL2008R2;MultipleActiveResultSets=True";
OleDbConnection con = new OleDbConnection(conStr);
con.Open();
string oSql = "select field_name as FieldName ,table_name as TableName, Source,Translation from data_translation";
OleDbDataAdapter da = new OleDbDataAdapter(oSql, con);
DataSet ds = new DataSet("DataTranslation");
da.Fill(ds, "DataTranslation");
con.Close();
return ds;
}
/// <summary>
/// 为根节点添加Element
/// </summary>
private static void CreateElementForRootNode()
{
XmlDocument xml = new XmlDocument();
xml.Load(@"E:\data_translation1.xml");
var node = xml.SelectSingleNode("root");
if (node == null) return;
XmlElement xe1 = xml.CreateElement("提醒3"); //创建一个<book>节点
xe1.SetAttribute("提醒日期", "2013-01-22"); //设置该节点genre属性
xe1.SetAttribute("提醒内容", "提醒3的内容1"); //设置该节点ISBN属性
xe1.SetAttribute("提醒附件", "提醒3附件path"); //设置该节点ISBN属性
node.AppendChild(xe1);
XmlElement xesub1 = xml.CreateElement("提醒4");
xesub1.InnerText = "提醒4"; //设置文本节点
node.AppendChild(xesub1); //添加到<book>节点中
var subNode = xesub1.CloneNode(true);
node.AppendChild(subNode);
xml.Save(@"E:\data_translation2.xml");
}
//为已存在的XML新加Element
private static void AppendXML()
{
XDocument xdoc1 = XDocument.Load(@"E:\data_translation1.xml");
//要追加的新内容(注意 一定要加root )
xdoc1.Root.Add(new XElement("提醒2",
new XElement("提醒日期", "2013-01-21 "),
new XElement("提醒内容", "提醒2的内容"),
new XElement("提醒附件", "提醒2附件path")
));
xdoc1.Save(@"E:\data_translation1.xml", SaveOptions.None);// 按xml格式保存
}
//新建XML,并且为XML新加节点
private void CreateXML()
{
//为XML加Element
if (!File.Exists(@"E:\data_translation1.xml"))
{
XDocument xdoc = new XDocument();
//添加一个初始元素“提醒1”
XElement xe =
new XElement("root",
new XElement("提醒1", new XElement("提醒日期", "2012-01-21 "), new XElement("提醒内容", "提醒1的内容"), new XElement("提醒附件", "提醒一附件path"))
);
xdoc.Add(xe);
xdoc.Save(@"E:\data_translation1.xml", SaveOptions.DisableFormatting);
}
Console.ReadLine();
}
#endregion
}
}