基于C#实现XML文件读取工具类
本文实例讲述了基于C#实现XML文件读取工具类。分享给大家供大家参考。具体如下:
这是我去年写的一个XML文件读取工具类,现在做了一些调整
基本能满足一般的XML文件读取需求。
更新:
2013年6月26日19:37Fix了几个Bug,为所有方法添加单元测试,并运行通过;同时调整了几个方法的位置。
///<summary>
///Author:jiangxiaoqiang
///</summary>
publicclassXmlReader
{
//=========================================================//
#region获取XmlDocument对象
///<summary>
///根据XML文件内容获取XmlDocument对象
///</summary>
///<paramname="xmlFileContent"></param>
///<returns></returns>
publicstaticXmlDocumentGetXmlDocByXmlContent(stringxmlFileContent)
{
if(string.IsNullOrEmpty(xmlFileContent))
{
returnnull;
}
varxDoc=newXmlDocument();
try
{
xDoc.LoadXml(xmlFileContent);
}
catch
{
xDoc=null;
}
returnxDoc;
}
///<summary>
///根据XML文件路径获取XmlDocument对象
///</summary>
///<paramname="xmlFilePath"></param>
///<returns></returns>
publicstaticXmlDocumentGetXmlDocByFilePath(stringxmlFilePath)
{
if(string.IsNullOrEmpty(xmlFilePath)||!File.Exists(xmlFilePath))
{
returnnull;
}
varxDoc=newXmlDocument();
try
{
xDoc.Load(xmlFilePath);
}
catch
{
thrownewException(string.Format("请确认该XML文件格式正确,路径为:{0}",xmlFilePath));
}
returnxDoc;
}
#endregion
//=========================================================//
//=========================================================//
#region获取XML节点(或节点列表)
///<summary>
///获取父节点下指定节点名称的第一个子节点
///</summary>
///<paramname="parentXmlNode"></param>
///<paramname="childNodeName"></param>
///<returns></returns>
publicstaticXmlNodeGetFirstChildNodeByName(XmlNodeparentXmlNode,stringchildNodeName)
{
varchildXmlNodes=GetChildNodesByName(parentXmlNode,childNodeName);
if(childXmlNodes!=null&&childXmlNodes.Count>0)
{
returnchildXmlNodes[0];
}
returnnull;
}
///<summary>
///获取父节点下指定节点名称的子节点列表
///</summary>
///<paramname="parentXmlNode">父节点</param>
///<paramname="nodeName">节点名称</param>
///<returns></returns>
publicstaticXmlNodeListGetChildNodesByName(XmlNodeparentXmlNode,stringnodeName)
{
if(parentXmlNode==null||string.IsNullOrEmpty(nodeName))
{
returnnull;
}
returnGetChildNodesByXPathExpr(parentXmlNode,string.Format(".//{0}",nodeName));
}
///<summary>
///获取父节点下满足xpathExpr表达式的XML子节点列表
///</summary>
///<paramname="parentXmlNode">父节点</param>
///<paramname="xpathExpr"></param>
///<returns></returns>
publicstaticXmlNodeListGetChildNodesByXPathExpr(XmlNodeparentXmlNode,stringxpathExpr)
{
if(parentXmlNode==null||string.IsNullOrEmpty(xpathExpr))
{
returnnull;
}
returnparentXmlNode.SelectNodes(xpathExpr);
}
///<summary>
///获取父节点下的第一个子节点
///</summary>
///<paramname="parentXmlNode"></param>
///<returns></returns>
publicstaticXmlNodeGetFirstChildNode(XmlNodeparentXmlNode)
{
varchildXmlNodes=GetChildNodes(parentXmlNode);
if(childXmlNodes!=null&&childXmlNodes.Count>0)
{
returnchildXmlNodes[0];
}
returnnull;
}
///<summary>
///获取父节点的子节点列表
///</summary>
///<paramname="parentXmlNode">父节点</param>
///<returns></returns>
publicstaticXmlNodeListGetChildNodes(XmlNodeparentXmlNode)
{
returnparentXmlNode==null?null:parentXmlNode.ChildNodes;
}
#endregion
//=========================================================//
//=========================================================//
#region读取节点属性值
///<summary>
///读取某个XML节点的属性值(根据属性名)
///</summary>
///<paramname="xmlNode"></param>
///<paramname="attrName"></param>
///<returns></returns>
publicstaticstringReadAttrValue(XmlNodexmlNode,stringattrName)
{
varxmlElement=xmlNodeasXmlElement;
returnxmlElement==null?null:xmlElement.GetAttribute(attrName);
}
///<summary>
///读取父节点下指定节点名和属性名的第一个子节点的属性值
///</summary>
///<paramname="parentXmlNode">XML父节点</param>
///<paramname="childNodeName">节点名称</param>
///<paramname="attrName">属性名</param>
///<returns></returns>
publicstaticstringReadFirstAttrValue(XmlNodeparentXmlNode,stringchildNodeName,stringattrName)
{
varattrVals=ReadAttrValues(parentXmlNode,childNodeName,attrName);
return(attrVals==null||attrVals.Length==0)?null:attrVals[0];
}
///<summary>
///读取父节点下指定节点名和属性名的所有子节点的该属性值的数组
///</summary>
///<paramname="parentXmlNode">XML文档</param>
///<paramname="childNodeName">节点名称</param>
///<paramname="attrName">属性名</param>
///<returns></returns>
publicstaticstring[]ReadAttrValues(XmlNodeparentXmlNode,stringchildNodeName,stringattrName)
{
if(parentXmlNode==null||string.IsNullOrEmpty(childNodeName)||string.IsNullOrEmpty(attrName))
{
returnnull;
}
varxpathExpr=string.Format("//{0}[@{1}]",childNodeName,attrName);
varnodes=GetChildNodesByXPathExpr(parentXmlNode,xpathExpr);
if(nodes!=null&&nodes.Count>0)
{
varnodeCount=nodes.Count;
varattrVals=newstring[nodeCount];
for(vari=0;i<nodeCount;i++)
{
attrVals[i]=((XmlElement)nodes[i]).GetAttribute(attrName);
}
returnattrVals;
}
returnnull;
}
#endregion
//=========================================================//
//=========================================================//
#region读取父节点下的子节点的文本内容
///<summary>
///读取父节点下指定节点名的第一个子节点的文本
///</summary>
///<paramname="parentXmlNode"></param>
///<paramname="childNodeName"></param>
///<returns></returns>
publicstaticstringReadFirstChildNodeTextByName(XmlNodeparentXmlNode,stringchildNodeName)
{
varchildNodeTexts=ReadChildNodeTextsByName(parentXmlNode,childNodeName);
if(childNodeTexts!=null&&childNodeTexts.Length>0)
{
returnchildNodeTexts[0];
}
returnnull;
}
///<summary>
///读取父节点下指定节点名的所有子节点的文本数组
///</summary>
///<paramname="parentXmlNode"></param>
///<paramname="childNodeName"></param>
///<returns></returns>
publicstaticstring[]ReadChildNodeTextsByName(XmlNodeparentXmlNode,stringchildNodeName)
{
if(parentXmlNode==null||string.IsNullOrEmpty(childNodeName))
{
returnnull;
}
varxpathExpr=string.Format(".//{0}",childNodeName);
varchildNodes=GetChildNodesByXPathExpr(parentXmlNode,xpathExpr);
if(childNodes!=null&&childNodes.Count>0)
{
varnodeCount=childNodes.Count;
varnodeTexts=newstring[nodeCount];
for(vari=0;i<nodeCount;i++)
{
nodeTexts[i]=childNodes[i].InnerText;
}
returnnodeTexts;
}
returnnull;
}
///<summary>
///读取父节点下的第一个子节点的文本
///</summary>
///<paramname="parentXmlNode"></param>
///<returns></returns>
publicstaticstringReadFirstChildNodeText(XmlNodeparentXmlNode)
{
varchildNodeTexts=ReadChildNodeTexts(parentXmlNode);
if(childNodeTexts!=null&&childNodeTexts.Length>0)
{
returnchildNodeTexts[0];
}
returnnull;
}
///<summary>
///读取父节点下的所有子节点的文本数组
///</summary>
///<paramname="parentXmlNode"></param>
///<returns></returns>
publicstaticstring[]ReadChildNodeTexts(XmlNodeparentXmlNode)
{
if(parentXmlNode==null)
{
returnnull;
}
varchildNodes=GetChildNodes(parentXmlNode);
if(childNodes!=null&&childNodes.Count>0)
{
varnodeCount=childNodes.Count;
varnodeTexts=newstring[nodeCount];
for(vari=0;i<nodeCount;i++)
{
nodeTexts[i]=childNodes[i].InnerText;
}
returnnodeTexts;
}
returnnull;
}
///<summary>
///读取XML节点文本
///</summary>
///<paramname="xmlNode"></param>
///<returns></returns>
publicstaticstringReadNodeText(XmlNodexmlNode)
{
if(xmlNode==null)
{
returnnull;
}
returnxmlNode.InnerText;
}
#endregion
//=========================================================//
}
希望本文所述对大家的C#程序设计有所帮助。