1、1XMLHelper(C#版)(更新)默认分类 2008-10-07 15:39:59 阅读 1217 评论 12 字号:大中小 XMLHelper.cs 文件using System;using System.Data;using System.Configuration;using System.Linq;using System.Xml.Linq;using System.Xml;/ / FileName: XMLHelper/ Author: ziyou/ Create Date: 2008-9-28/ Email: ysli_ Version: 1.0.0.3/ Rewrite: 2
2、009-2-3/ public class XMLHelperpublic XMLHelper()/ TODO: Add constructor logic here2/#region private AppendChildprivate static void AppendChild(XmlDocument xDoc, XmlNode parentNode, params XmlParameter paras)foreach (XmlParameter xpar in paras)XmlNode newNode = xDoc.CreateNode(XmlNodeType.Element, x
3、par.Name, null);string ns = xpar.NamespaceOfPrefix = null ? “ : newNode.GetNamespaceOfPrefix(xpar.NamespaceOfPrefix);foreach (AttributeParameter attp in xpar.Attributes)XmlNode attr = xDoc.CreateNode(XmlNodeType.Attribute, attp.Name, ns = “ ? null : ns);attr.Value = attp.Value;newNode.Attributes.Set
4、NamedItem(attr);newNode.InnerText = xpar.InnerText;parentNode.AppendChild(newNode);#endregion#region private AddEveryNodeprivate static void AddEveryNode(XmlDocument xDoc, XmlNode parentNode, params XmlParameter paras)3XmlNodeList nlst = xDoc.DocumentElement.ChildNodes;foreach (XmlNode xns in nlst)i
5、f (xns.Name = parentNode.Name)AppendChild(xDoc, xns, paras);elseforeach (XmlNode xn in xns)if (xn.Name = parentNode.Name)AppendChild(xDoc, xn, paras);#endregion#region xmlDoc/ / 创建一个 XmlDocument 对象4/ / 文件名称或 XML 字符串public static XmlDocument xmlDoc(string PathOrString)tryXmlDocument xDoc = new XmlDoc
6、ument();if (System.IO.File.Exists(PathOrString)xDoc.Load(PathOrString);elsexDoc.LoadXml(PathOrString);return xDoc;catchreturn null;#endregion#region CreateXMLFile5/ / 创建一个 XML 文档/ / 文件名称,包括完整路径/ 根结点名称/ 元素节点名称/ XML 参数public static void CreateXMLFile(string fileFullName, string rootName, string elemNa
7、me, params XmlParameter paras)XmlDocument xDoc = new XmlDocument();XmlNode xn;xn = xDoc.CreateXmlDeclaration(“1.0“, “UTF-8“, null);xDoc.AppendChild(xn);XmlNode root = xDoc.CreateElement(rootName);xDoc.AppendChild(root);XmlNode ln = xDoc.CreateNode(XmlNodeType.Element, elemName, null);AppendChild(xDo
8、c, ln, paras);root.AppendChild(ln);tryxDoc.Save(fileFullName);catch6throw;/ / 创建一个 XML 文档/ / 文件名称,包括完整路径/ 根结点名称/ 元素节点对象/ XML 参数public static void CreateXMLFile(string fileFullName, string rootName, XmlParameter elemp, params XmlParameter paras)XmlDocument xDoc = new XmlDocument();XmlNode xn;xn = xDo
9、c.CreateXmlDeclaration(“1.0“, “UTF-8“, null);xDoc.AppendChild(xn);XmlNode root = xDoc.CreateElement(rootName);xDoc.AppendChild(root);XmlNode ln = xDoc.CreateNode(XmlNodeType.Element, elemp.Name, null);string ns = elemp.NamespaceOfPrefix = null ? “ : ln.GetNamespaceOfPrefix(elemp.NamespaceOfPrefix);f
10、oreach (AttributeParameter ap in elemp.Attributes)7XmlNode elemAtt = xDoc.CreateNode(XmlNodeType.Attribute, ap.Name, ns = “ ? null : ns);elemAtt.Value = ap.Value;ln.Attributes.SetNamedItem(elemAtt);AppendChild(xDoc, ln, paras);root.AppendChild(ln);tryxDoc.Save(fileFullName);catchthrow;/ / 创建一个 XML 文
11、档/ / 文件名称,包括完整路径/ 根结点对象/ 元素节点名称/ XML 参数public static void CreateXMLFile(string fileFullName, XmlParameter rootp, string elemName, params XmlParameter paras)8XmlDocument xDoc = new XmlDocument();XmlNode xn;xn = xDoc.CreateXmlDeclaration(“1.0“, “UTF-8“, null);xDoc.AppendChild(xn);XmlNode root = xDoc.C
12、reateElement(rootp.Name);string ns = rootp.NamespaceOfPrefix = null ? “ : root.GetNamespaceOfPrefix(rootp.NamespaceOfPrefix);foreach (AttributeParameter ap in rootp.Attributes)XmlNode rootAtt = xDoc.CreateNode(XmlNodeType.Attribute, ap.Name, ns = “ ? null : ns);rootAtt.Value = ap.Value;root.Attribut
13、es.SetNamedItem(rootAtt);xDoc.AppendChild(root);XmlNode ln = xDoc.CreateNode(XmlNodeType.Element, elemName, null);AppendChild(xDoc, ln, paras);root.AppendChild(ln);tryxDoc.Save(fileFullName);catch9throw;/ / 创建一个 XML 文档/ / 文件名称,包括完整路径/ 根结点对象/ 元素节点对象/ XML 参数public static void CreateXMLFile(string file
14、FullName, XmlParameter rootp, XmlParameter elemp, params XmlParameter paras)XmlDocument xDoc = new XmlDocument();XmlNode xn;xn = xDoc.CreateXmlDeclaration(“1.0“, “UTF-8“, null);xDoc.AppendChild(xn);XmlNode root = xDoc.CreateElement(rootp.Name);string ns = rootp.NamespaceOfPrefix = null ? “ : root.Ge
15、tNamespaceOfPrefix(rootp.NamespaceOfPrefix);foreach (AttributeParameter ap in rootp.Attributes)XmlNode rootAtt = xDoc.CreateNode(XmlNodeType.Attribute, ap.Name, ns = “ ? null : ns);rootAtt.Value = ap.Value;root.Attributes.SetNamedItem(rootAtt);10xDoc.AppendChild(root);XmlNode ln = xDoc.CreateNode(Xm
16、lNodeType.Element, elemp.Name, null);ns = elemp.NamespaceOfPrefix = null ? “ : ln.GetNamespaceOfPrefix(elemp.NamespaceOfPrefix);foreach (AttributeParameter ap in elemp.Attributes)XmlNode elemAtt = xDoc.CreateNode(XmlNodeType.Attribute, ap.Name, ns = “ ? null : ns);elemAtt.Value = ap.Value;ln.Attribu
17、tes.SetNamedItem(elemAtt);AppendChild(xDoc, ln, paras);root.AppendChild(ln);tryxDoc.Save(fileFullName);catchthrow;#endregion#region AddNewNode11/ / 添加新节点/ / 文件名称,包括完整路径/ 新节点的父节点对象/ XML 参数对象public static bool AddNewNode(string fileFullName, XmlNode parentNode, params XmlParameter paras)XmlDocument xD
18、oc = xmlDoc(fileFullName);if (parentNode.Name = xDoc.DocumentElement.Name)XmlNode newNode = xDoc.CreateNode(XmlNodeType.Element, xDoc.DocumentElement.ChildNodes0.Name, null);AppendChild(xDoc, newNode, paras);xDoc.DocumentElement.AppendChild(newNode);elseAddEveryNode(xDoc, parentNode, paras);xDoc.Sav
19、e(fileFullName);return true;/ 12/ 添加新节点/ / XmlDocument 对象/ 新节点的父节点对象/ XML 参数对象public static bool AddNewNode(XmlDocument xDoc, XmlNode parentNode, params XmlParameter paras)if (parentNode.Name = xDoc.DocumentElement.Name)XmlNode newNode = xDoc.CreateNode(XmlNodeType.Element, xDoc.DocumentElement.Chil
20、dNodes0.Name, null);AppendChild(xDoc, newNode, paras);xDoc.DocumentElement.AppendChild(newNode);elseAddEveryNode(xDoc, parentNode, paras);return true;/ / 添加新节点/ / XmlDocument 对象13/ 新节点的父节点名称/ XML 参数对象public static bool AddNewNode(XmlDocument xDoc, string parentName, params XmlParameter paras)XmlNode
21、 parentNode = GetNode(xDoc, parentName);if (parentNode = null) return false;if (parentNode.Name = xDoc.DocumentElement.Name)XmlNode newNode = xDoc.CreateNode(XmlNodeType.Element, xDoc.DocumentElement.ChildNodes0.Name, null);AppendChild(xDoc, newNode, paras);xDoc.DocumentElement.AppendChild(newNode);
22、elseAddEveryNode(xDoc, parentNode, paras);return true;/ / 添加新节点/ / 文件名称,包括完整路径/ 新节点的父节点名称14/ XML 参数对象public static bool AddNewNode(string fileFullName, string parentName, params XmlParameter paras)XmlDocument xDoc = xmlDoc(fileFullName);XmlNode parentNode = GetNode(xDoc, parentName);if (parentNode =
23、 null) return false;if (parentNode.Name = xDoc.DocumentElement.Name)XmlNode newNode = xDoc.CreateNode(XmlNodeType.Element, xDoc.DocumentElement.ChildNodes0.Name, null);AppendChild(xDoc, newNode, paras);xDoc.DocumentElement.AppendChild(newNode);elseAddEveryNode(xDoc, parentNode, paras);xDoc.Save(file
24、FullName);return true;#endregion#region AddAttribute/ / 添加节点属性15/ / XmlDocument 对象/ 节点对象/ 该节点的命名空间 URI/ 新属性名称/ 属性值public static void AddAttribute(XmlDocument xDoc, XmlNode node, string namespaceOfPrefix, string attributeName, string attributeValue)string ns = namespaceOfPrefix = null ? null : node.G
25、etNamespaceOfPrefix(namespaceOfPrefix);XmlNode xn = xDoc.CreateNode(XmlNodeType.Attribute, attributeName, ns = “ ? null : ns);xn.Value = attributeValue;node.Attributes.SetNamedItem(xn);/ / 添加节点属性/ / XmlDocument 对象/ 节点对象/ 该节点的命名空间 URI/ 节点属性参数public static void AddAttribute(XmlDocument xDoc, XmlNode n
26、ode, string namespaceOfPrefix, params AttributeParameter attps)string ns = namespaceOfPrefix = null ? null : node.GetNamespaceOfPrefix(namespaceOfPrefix);16foreach (AttributeParameter attp in attps)XmlNode xn = xDoc.CreateNode(XmlNodeType.Attribute, attp.Name, ns = “ ? null : ns);xn.Value = attp.Val
27、ue;node.Attributes.SetNamedItem(xn);/ / 添加节点属性/ / 文件名称,包括完整路径/ 节点对象/ 该节点的命名空间 URI/ 新属性名称/ 属性值public static void AddAttribute(string fileFullName, XmlNode node, string namespaceOfPrefix, string attributeName, string attributeValue)XmlDocument xDoc = xmlDoc(fileFullName);AddAttribute(xDoc, node, names
28、paceOfPrefix, attributeName, attributeValue);xDoc.Save(fileFullName);/ / 添加节点属性17/ / 文件名称,包括完整路径/ 节点对象/ 该节点的命名空间 URI/ 节点属性参数public static void AddAttribute(string fileFullName, XmlNode node, string namespaceOfPrefix, params AttributeParameter attps)XmlDocument xDoc = xmlDoc(fileFullName);AddAttribut
29、e(xDoc, node, namespaceOfPrefix, attps);xDoc.Save(fileFullName);/ / 添加节点属性/ / XmlDocument 对象/ 节点名称/ 该节点的命名空间 URI/ 新属性名称/ 属性值public static void AddAttribute(XmlDocument xDoc, string nodeName, string namespaceOfPrefix, string attributeName, string attributeValue)XmlNodeList xlst = xDoc.DocumentElement
30、.ChildNodes;for (int i = 0; i / 添加节点属性/ / XmlDocument 对象/ 节点名称/ 该节点的命名空间 URI/ 节点属性参数public static void AddAttribute(XmlDocument xDoc, string nodeName, string namespaceOfPrefix, params AttributeParameter attps)XmlNodeList xlst = xDoc.DocumentElement.ChildNodes;for (int i = 0; i / 添加节点属性/ / 文件名称,包括完整路
31、径/ 节点名称/ 该节点的命名空间 URI/ 新属性名称/ 属性值public static void AddAttribute(string fileFullName, string nodeName, string namespaceOfPrefix, string attributeName, string attributeValue)XmlDocument xDoc = xmlDoc(fileFullName);XmlNodeList xlst = xDoc.DocumentElement.ChildNodes;for (int i = 0; i / 添加节点属性/ / 文件名称,包
32、括完整路径/ 节点名称/ 该节点的命名空间 URI/ 节点属性参数public static void AddAttribute(string fileFullName, string nodeName, string namespaceOfPrefix, params AttributeParameter attps)XmlDocument xDoc = xmlDoc(fileFullName);XmlNodeList xlst = xDoc.DocumentElement.ChildNodes;for (int i = 0; i / 获取指定节点名称的节点对象/ / 文件名称,包括完整路径
33、/ 节点名称/ public static XmlNode GetNode(string fileFullName, string nodeName)XmlDocument xDoc = xmlDoc(fileFullName);if (xDoc.DocumentElement.Name = nodeName) return (XmlNode)xDoc.DocumentElement;XmlNodeList nlst = xDoc.DocumentElement.ChildNodes;foreach (XmlNode xns in nlst) / 遍历所有子节点if (xns.Name.ToL
34、ower() = nodeName.ToLower() return xns;elseXmlNode xn = GetNode(xns, nodeName);if (xn != null) return xn; / V1.0.0.3 添加节点判断22return null;/ / 获取指定节点名称的节点对象/ / 节点对象/ 节点名称/ public static XmlNode GetNode(XmlNode node, string nodeName)foreach (XmlNode xn in node)if (xn.Name.ToLower() = nodeName.ToLower()
35、 return xn;elseXmlNode tmp = GetNode(xn, nodeName);if (tmp != null) return tmp;return null;/ / 获取指定节点名称的节点对象/ 23/ XmlDocument 对象/ 节点名称/ public static XmlNode GetNode(XmlDocument xDoc, string nodeName)if (xDoc.DocumentElement.Name = nodeName) return (XmlNode)xDoc.DocumentElement;XmlNodeList nlst = xD
36、oc.DocumentElement.ChildNodes;foreach (XmlNode xns in nlst) / 遍历所有子节点if (xns.Name.ToLower() = nodeName.ToLower() return xns;elseXmlNode xn = GetNode(xns, nodeName);if (xn != null) return xn; / 添加节点判断, 避免只查询一个节点return null;/ / 获取指定节点名称的节点对象/ / XmlDocument 对象/ 节点索引/ 节点名称24public static XmlNode GetNode
37、(XmlDocument xDoc, int Index, string nodeName)XmlNodeList nlst = xDoc.DocumentElement.ChildNodes;if (nlst.Count / 获取指定节点名称的节点对象/ / 文件名称,包括完整路径/ 节点索引/ 节点名称public static XmlNode GetNode(string fileFullName, int Index, string nodeName)XmlDocument xDoc = xmlDoc(fileFullName);XmlNodeList nlst = xDoc.Docu
38、mentElement.ChildNodes;if (nlst.Count / 获取指定节点名称的节点对象/ / 节点对象/ 节点名称/ 节点内容public static XmlNode GetNode(XmlNode node, string nodeName, string innerText)foreach (XmlNode xn in node)if (xn.Name.ToLower() = nodeName.ToLower() elseXmlNode tmp = GetNode(xn, nodeName, innerText);if (tmp != null) return tmp
39、;return null;26/ / 获取指定节点名称的节点对象/ / XmlDocument 对象/ 节点名称/ 节点内容public static XmlNode GetNode(XmlDocument xDoc, string nodeName, string innerText)XmlNodeList nlst = xDoc.DocumentElement.ChildNodes;foreach (XmlNode xns in nlst) / 遍历所有子节点if (xns.Name.ToLower() = nodeName.ToLower() XmlNode tmp = GetNode(
40、xns, nodeName, innerText);if (tmp != null) return tmp;return null;/ / 获取指定节点名称的节点对象/ / XmlDocument 对象/ XML 参数public static XmlNode GetNode(XmlDocument xDoc, XmlParameter xpar)27return GetNode(xDoc, xpar.Name, xpar.InnerText);/ / 获取指定节点名称的节点对象/ / 节点对象/ XML 参数public static XmlNode GetNode(XmlNode node
41、, XmlParameter xpar)return GetNode(node, xpar.Name, node.InnerText);#endregion#region UpdateNode/ / 修改节点的内容/ / 修改的节点对象/ XML 参数对象public static void UpdateNode(XmlNode node, XmlParameter para)node.InnerText = para.InnerText;for (int i = 0; i / 修改节点的内容/ / 父节点对象/ 该节点的索引/ 修改后的内容public static void UpdateN
42、ode(XmlNode node, int childIndex, string nodeText)node.ChildNodeschildIndex.InnerText = nodeText;/ / 修改节点的内容/ / 修改的节点对象/ 修改后的内容public static void UpdateNode(XmlNode node, string nodeText)node.InnerText = nodeText;/ / 修改节点的内容/ 29/ XMLDocument 对象/ XML 参数对象public static void UpdateNode(XmlDocument xDoc
43、, int Index, XmlParameter para)XmlNode node = GetNode(xDoc, Index, para.Name);UpdateNode(node, para);/ / 修改节点的内容/ / XMLDocument 对象/ 父节点名称/ 该节点的索引/ 修改后的内容/ 修改后的值,如果没有,那么该值为 nullpublic static void UpdateNode(XmlDocument xDoc, int Index, string nodeName, int childIndex, string nodeText)XmlNode node = G
44、etNode(xDoc, Index, nodeName);UpdateNode(node, childIndex, nodeText);/ / 修改节点的内容/ 30/ XMLDocument 对象/ 修改的节点名称/ 修改后的内容/ 修改后的值,如果没有,那么该值为 nullpublic static void UpdateNode(XmlDocument xDoc, int Index, string nodeName, string nodeText)XmlNode node = GetNode(xDoc, Index, nodeName);UpdateNode(node, nodeText);/ / 修改节点的内容/ / 文件名称,包括完整路径/ XML 参数对象public static void UpdateNode(string fileFullName, int Index, XmlParameter para)XmlDocument xDoc = xmlDoc(fileFullName);UpdateNode(xDoc, Index, para);xDoc.Save(fileFullName);/ / 修改节点的内容/ / 文件名称,包括完整路径