/// <summary>
/// 创建XML文档
/// </summary>
/// <param name="name">根节点名称</param>
/// <param name="type">根节点的一个属性值</param>
/// <returns></returns>
/// moss中调用方法:创建的文件如果要存到moss的文档库中,则:
/// XmlDocument doc = XmlOperate.CreateXmlDocument("project", "T");
/// 在此可嵌入增加子节点方法,如AddTaskNode(taskObj, ref doc); ..
/// byte[] fileContent = Encoding.UTF8.GetBytes(doc.OuterXml);
/// folder.Files.Add("name.xml", fileContent, true);
/// web.Update();
/// .net中调用方法:写入文件中,则:
/// document = XmlOperate.CreateXmlDocument("sex", "sexy");
/// document.Save("c:/bookstore.xml");
public static XmlDocument CreateXmlDocument(string name, string type)
{
XmlDocument doc = null;
XmlElement rootEle = null;
try
{
doc = new XmlDocument();
doc.LoadXml("<" + name + "/>");
rootEle = doc.DocumentElement;
rootEle.SetAttribute("type", type);
}
catch (Exception er)
{
throw er;
}
return doc;
}
/// <summary>
/// 在根节点下增加子元素
/// </summary>
/// <param name="document"></param>
/// <param name="nodeName"></param>
/// <param name="type"></param>
/// 调用方法:
/// document = xmloper.CreateXmlDocument("animal", "carnivore");
/// XmlOperate.AddNewNode1(ref document, "carnivore", "high");
public static void AddNewNode1(ref XmlDocument document, string nodeName, string type)
{
XmlElement taskEle = null;
try
{
taskEle = document.CreateElement(nodeName);
taskEle.SetAttribute("type", type);
document.DocumentElement.AppendChild((XmlNode)taskEle);
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 在元素下增加子元素
/// </summary>
/// <param name="element"></param>
/// <param name="nodeName"></param>
/// <param name="type"></param>
/// 调用方法:
/// XmlDocument document = new XmlDocument();
/// 先取到相应的元素,然后调用该方法在该元素下增加子元素
/// XmlElement root = (XmlElement)document.SelectSingleNode("//animal/third");
/// XmlOperate.AddNewNode2(ref root,"thaw","boost investor confidence");
///注意上面的"//animal/third"也可换成"workflow[@type='T' and @isSpecial='1']"这种形式用来获取带有相应属性的元素
public static void AddNewNode2(ref XmlElement element, string nodeName, string type)
{
XmlElement taskEle = null;
try
{
taskEle = element.OwnerDocument.CreateElement(nodeName);
taskEle.SetAttribute("type", type);
element.AppendChild((XmlNode)taskEle);
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 获取类型为制定值的一组节点
/// </summary>
/// <param name="type">类型值。E.G.workflow[@type='T' and @isSpecial='1']</param>
/// <returns></returns>
/// 注意:返回的 XmlNodeList 类型是个类似于arraylist的类型,所以要得到它的值只能遍历
public static XmlNodeList GetDesiredNode(string type)
{
XmlDocument document = new XmlDocument();
return document.SelectNodes("type");
}
/// <summary>
/// 抓取网页上的xml文档赋值给XmlDocument对象
/// </summary>
/// <param name="url">网页的url(网页的内容必须是xml格式的)</param>
/// <returns></returns>
public static XmlDocument GetXMLDocumentFromWebPage(string url)
{
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
myRequest.Method = "POST";
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.ContentLength = 0;
// Get response
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.Default);
string content = reader.ReadToEnd();
XmlDocument document = new XmlDocument();
document.LoadXml(content);
return document;
}
/// <summary>
/// 获取服务器上指定文件的xml文件内容
/// </summary>
/// <param name="location"></param>
/// <returns></returns>
public static string GetXMLFile(string location)
{
XmlDocument document = new XmlDocument();
document.Load(@"G:/ttt.xml");
return document.InnerXml;
}
//获取sharepoint中指定文件的内容
//public string GetProjectWorkflowUrl(SPFile file)
//{
// byte[] content = file.OpenBinary();
// contentStr = Encoding.UTF8.GetString(content);
// return contentStr;
//}
#region GetDataSetByXml
/// <summary>
/// 读取xml直接返回DataSet
/// </summary>
/// <param name="strXmlPath">xml文件相对路径</param>
/// <returns></returns>
public static DataSet GetDataSetByXml(string strXmlPath)
{
try
{
DataSet ds = new DataSet();
ds.ReadXml(GetXmlFullPath(strXmlPath));
if (ds.Tables.Count > 0)
{
return ds;
}
return null;
}
catch (Exception ex)
{
//throw ex;
return null;
}
}
#endregion
#region GetDataViewByXml
/// <summary>
/// 读取Xml返回一个经排序或筛选后的DataView
/// </summary>
/// <param name="strXmlPath">xml文件相对路径</param>
/// <param name="strWhere">筛选条件,如:"name = 'kgdiwss'"</param>
/// <param name="strSort">排序条件,如:"Id desc"</param>
/// <returns></returns>
public static DataView GetDataViewByXml(string strXmlPath, string strWhere, string strSort)
{
try
{
DataSet ds = new DataSet();
ds.ReadXml(GetXmlFullPath(strXmlPath));
DataView dv = new DataView(ds.Tables[0]);
if (strSort != null)
{
dv.Sort = strSort;
}
if (strWhere != null)
{
dv.RowFilter = strWhere;
}
return dv;
}
catch (Exception)
{
return null;
}
}
#endregion
#region WriteXmlByDataSet
///
/// 向Xml文件插入一行数据
///
/// xml文件相对路径
/// 要插入行的列名数组,如:string[] Columns = {"name","IsMarried"};
/// 要插入行每列的值数组,如:string[] ColumnValue={"明天去要饭","false"};
/// 成功返回true,否则返回false
public static bool WriteXmlByDataSet(string strXmlPath, string[] Columns, string[] ColumnValue)
{
try
{
//根据传入的XML路径得到.XSD的路径,两个文件放在同一个目录下
string strXsdPath = strXmlPath.Substring(0, strXmlPath.IndexOf(".")) + ".xsd";
DataSet ds = new DataSet();
//读xml架构,关系到列的数据类型
ds.ReadXmlSchema(GetXmlFullPath(strXsdPath));
ds.ReadXml(GetXmlFullPath(strXmlPath));
DataTable dt = ds.Tables[0];
//在原来的表格基础上创建新行
DataRow newRow = dt.NewRow();
//循环给一行中的各个列赋值
for (int i = 0; i < Columns.Length; i++)
{
newRow[Columns[i]] = ColumnValue[i];
}
dt.Rows.Add(newRow);
dt.AcceptChanges();
ds.AcceptChanges();
ds.WriteXml(GetXmlFullPath(strXmlPath));
return true;
}
catch (Exception)
{
return false;
}
}
#endregion
#region UpdateXmlRow
///
/// 更行符合条件的一条Xml记录
///
/// XML文件路径
/// 列名数组
/// 列值数组
/// 条件列名
/// 条件列值
///
public static bool UpdateXmlRow(string strXmlPath, string[] Columns, string[] ColumnValue, string strWhereColumnName, string strWhereColumnValue)
{
try
{
string strXsdPath = strXmlPath.Substring(0, strXmlPath.IndexOf(".")) + ".xsd";
DataSet ds = new DataSet();
//读xml架构,关系到列的数据类型
ds.ReadXmlSchema(GetXmlFullPath(strXsdPath));
ds.ReadXml(GetXmlFullPath(strXmlPath));
//先判断行数
if (ds.Tables[0].Rows.Count > 0)
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
//如果当前记录为符合Where条件的记录
if (ds.Tables[0].Rows[i][strWhereColumnName].ToString().Trim().Equals(strWhereColumnValue))
{
//循环给找到行的各列赋新值
for (int j = 0; j < Columns.Length; j++)
{
ds.Tables[0].Rows[i][Columns[j]] = ColumnValue[j];
}
//更新DataSet
ds.AcceptChanges();
//重新写入XML文件
ds.WriteXml(GetXmlFullPath(strXmlPath));
return true;
}
}
}
return false;
}
catch (Exception)
{
return false;
}
}
#endregion
#region DeleteXmlRowByIndex
///
/// 通过删除DataSet中iDeleteRow这一行,然后重写Xml以实现删除指定行
///
///
/// 要删除的行在DataSet中的Index值
public static bool DeleteXmlRowByIndex(string strXmlPath, int iDeleteRow)
{
try
{
DataSet ds = new DataSet();
ds.ReadXml(GetXmlFullPath(strXmlPath));
if (ds.Tables[0].Rows.Count > 0)
{
//删除符号条件的行
ds.Tables[0].Rows[iDeleteRow].Delete();
}
ds.WriteXml(GetXmlFullPath(strXmlPath));
return true;
}
catch (Exception)
{
return false;
}
}
#endregion
#region DeleteXmlRows
///
/// 删除strColumn列中值为ColumnValue的行
///
/// xml相对路径
/// 列名
/// strColumn列中值为ColumnValue的行均会被删除
///
public static bool DeleteXmlRows(string strXmlPath, string strColumn, string[] ColumnValue)
{
try
{
DataSet ds = new DataSet();
ds.ReadXml(GetXmlFullPath(strXmlPath));
//先判断行数
if (ds.Tables[0].Rows.Count > 0)
{
//判断行多还是删除的值多,多的for循环放在里面
if (ColumnValue.Length > ds.Tables[0].Rows.Count)
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
for (int j = 0; j < ColumnValue.Length; j++)
{
if (ds.Tables[0].Rows[i][strColumn].ToString().Trim().Equals(ColumnValue[j]))
{
ds.Tables[0].Rows[i].Delete();
}
}
}
}
else
{
for (int j = 0; j < ColumnValue.Length; j++)
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
if (ds.Tables[0].Rows[i][strColumn].ToString().Trim().Equals(ColumnValue[j]))
{
ds.Tables[0].Rows[i].Delete();
}
}
}
}
ds.WriteXml(GetXmlFullPath(strXmlPath));
}
return true;
}
catch (Exception)
{
return false;
}
}
#endregion
#region DeleteXmlAllRows
///
/// 删除所有行
///
/// XML路径
///
public static bool DeleteXmlAllRows(string strXmlPath)
{
try
{
DataSet ds = new DataSet();
ds.ReadXml(GetXmlFullPath(strXmlPath));
//如果记录条数大于0
if (ds.Tables[0].Rows.Count > 0)
{
//移除所有记录
ds.Tables[0].Rows.Clear();
}
//重新写入,这时XML文件中就只剩根节点了
ds.WriteXml(GetXmlFullPath(strXmlPath));
return true;
}
catch (Exception)
{
return false;
}
}
#endregion
#region GetXmlFullPath
///
/// 返回完整路径
///
/// Xml的路径
///
public static string GetXmlFullPath(string strPath)
{
//如果路径中含有:符号,则认定为传入的是完整路径
if (strPath.IndexOf(":") > 0)
{
return strPath;
}
else
{
//返回完整路径
return System.Web.HttpContext.Current.Server.MapPath(strPath);
}
}
#endregion