读取XML的内容

读取XML的内容

/// <summary>
    /// 读写xml文件
    /// </summary>
    public class XmlReader
    {
        //========================================================= //
        #region 获取XmlDocument对象
        /// <summary>
        /// 根据XML文件内容获取XmlDocument对象
        /// </summary>
        /// <param name="xmlFileContent"></param>
        /// <returns></returns>
        public static XmlDocument GetXmlDocByXmlContent(string xmlFileContent)
        {
            if (string.IsNullOrEmpty(xmlFileContent))
            {
                return null;
            }
            var xDoc = new XmlDocument();
            try
            {
                xDoc.LoadXml(xmlFileContent);
            }
            catch
            {
                xDoc = null;
            }
            return xDoc;
        }
        /// <summary>
        /// 根据XML文件路径获取XmlDocument对象
        /// </summary>
        /// <param name="xmlFilePath"></param>
        /// <returns></returns>
        public static XmlDocument GetXmlDocByFilePath(string xmlFilePath)
        {
            if (string.IsNullOrEmpty(xmlFilePath) || !File.Exists(xmlFilePath))
            {
                return null;
            }
            var xDoc = new XmlDocument();
            try
            {
                xDoc.Load(xmlFilePath);
            }
            catch
            {
                throw new Exception(string.Format("请确认该XML文件格式正确,路径为:{0}", xmlFilePath));
            }
            return xDoc;
        }
        #endregion
        //========================================================= //
        //========================================================= //
        #region 获取XML节点(或节点列表)
        /// <summary>
        /// 获取父节点下指定节点名称的第一个子节点
        /// </summary>
        /// <param name="parentXmlNode"></param>
        /// <param name="childNodeName"></param>
        /// <returns></returns>
        public static XmlNode GetFirstChildNodeByName(XmlNode parentXmlNode, string childNodeName)
        {
            var childXmlNodes = GetChildNodesByName(parentXmlNode, childNodeName);
            if (childXmlNodes != null && childXmlNodes.Count > 0)
            {
                return childXmlNodes[0];
            }
            return null;
        }
        /// <summary>
        /// 获取父节点下指定节点名称的子节点列表
        /// </summary>
        /// <param name="parentXmlNode">父节点</param>
        /// <param name="nodeName">节点名称</param>
        /// <returns></returns>
        public static XmlNodeList GetChildNodesByName(XmlNode parentXmlNode, string nodeName)
        {
            if (parentXmlNode == null || string.IsNullOrEmpty(nodeName))
            {
                return null;
            }
            return GetChildNodesByXPathExpr(parentXmlNode, string.Format(".//{0}", nodeName));
        }
        /// <summary>
        /// 获取父节点下满足xpathExpr表达式的XML子节点列表
        /// </summary>
        /// <param name="parentXmlNode">父节点</param>
        /// <param name="xpathExpr"></param>
        /// <returns></returns>  
        public static XmlNodeList GetChildNodesByXPathExpr(XmlNode parentXmlNode, string xpathExpr)
        {
            if (parentXmlNode == null || string.IsNullOrEmpty(xpathExpr))
            {
                return null;
            }
            return parentXmlNode.SelectNodes(xpathExpr);
        }
        /// <summary>
        /// 获取父节点下的第一个子节点
        /// </summary>
        /// <param name="parentXmlNode"></param>
        /// <returns></returns>
        public static XmlNode GetFirstChildNode(XmlNode parentXmlNode)
        {
            var childXmlNodes = GetChildNodes(parentXmlNode);
            if (childXmlNodes != null && childXmlNodes.Count > 0)
            {
                return childXmlNodes[0];
            }
            return null;
        }
        /// <summary>
        /// 获取父节点的子节点列表
        /// </summary>
        /// <param name="parentXmlNode">父节点</param>
        /// <returns></returns>
        public static XmlNodeList GetChildNodes(XmlNode parentXmlNode)
        {
            return parentXmlNode == null ? null : parentXmlNode.ChildNodes;
        }
        #endregion
        //========================================================= //
        //========================================================= //
        #region 读取节点属性值
        /// <summary>
        /// 读取某个XML节点的属性值(根据属性名)
        /// </summary>
        /// <param name="xmlNode"></param>
        /// <param name="attrName"></param>
        /// <returns></returns>
        public static string ReadAttrValue(XmlNode xmlNode, string attrName)
        {
            var xmlElement = xmlNode as XmlElement;
            return xmlElement == null ? null : xmlElement.GetAttribute(attrName);
        }
        /// <summary>
        /// 读取父节点下指定节点名和属性名的第一个子节点的属性值
        /// </summary>
        /// <param name="parentXmlNode">XML父节点</param>
        /// <param name="childNodeName">节点名称</param>
        /// <param name="attrName">属性名</param>
        /// <returns></returns>
        public static string ReadFirstAttrValue(XmlNode parentXmlNode, string childNodeName, string attrName)
        {
            var attrVals = ReadAttrValues(parentXmlNode, childNodeName, attrName);
            return (attrVals == null || attrVals.Length == 0) ? null : attrVals[0];
        }
        /// <summary>
        /// 读取父节点下指定节点名和属性名的所有子节点的该属性值的数组
        /// </summary>
        /// <param name="parentXmlNode">XML文档</param>
        /// <param name="childNodeName">节点名称</param>
        /// <param name="attrName">属性名</param>
        /// <returns></returns>
        public static string[] ReadAttrValues(XmlNode parentXmlNode, string childNodeName, string attrName)
        {
            if (parentXmlNode == null || string.IsNullOrEmpty(childNodeName) || string.IsNullOrEmpty(attrName))
            {
                return null;
            }
            var xpathExpr = string.Format("//{0}[@{1}]", childNodeName, attrName);
            var nodes = GetChildNodesByXPathExpr(parentXmlNode, xpathExpr);
            if (nodes != null && nodes.Count > 0)
            {
                var nodeCount = nodes.Count;
                var attrVals = new string[nodeCount];
                for (var i = 0; i < nodeCount; i++)
                {
                    attrVals[i] = ((XmlElement)nodes[i]).GetAttribute(attrName);
                }
                return attrVals;
            }
            return null;
        }
        #endregion
        //========================================================= //
        //========================================================= //
        #region 读取父节点下的子节点的文本内容
        /// <summary>
        /// 读取父节点下指定节点名的第一个子节点的文本
        /// </summary>
        /// <param name="parentXmlNode"></param>
        /// <param name="childNodeName"></param>
        /// <returns></returns>
        public static string ReadFirstChildNodeTextByName(XmlNode parentXmlNode, string childNodeName)
        {
            var childNodeTexts = ReadChildNodeTextsByName(parentXmlNode, childNodeName);
            if (childNodeTexts != null && childNodeTexts.Length > 0)
            {
                return childNodeTexts[0];
            }
            return null;
        }
        /// <summary>
        /// 读取父节点下指定节点名的所有子节点的文本数组
        /// </summary>
        /// <param name="parentXmlNode"></param>
        /// <param name="childNodeName"></param>
        /// <returns></returns>
        public static string[] ReadChildNodeTextsByName(XmlNode parentXmlNode, string childNodeName)
        {
            if (parentXmlNode == null || string.IsNullOrEmpty(childNodeName))
            {
                return null;
            }
            var xpathExpr = string.Format(".//{0}", childNodeName);
            var childNodes = GetChildNodesByXPathExpr(parentXmlNode, xpathExpr);
            if (childNodes != null && childNodes.Count > 0)
            {
                var nodeCount = childNodes.Count;
                var nodeTexts = new string[nodeCount];
                for (var i = 0; i < nodeCount; i++)
                {
                    nodeTexts[i] = childNodes[i].InnerText;
                }
                return nodeTexts;
            }
            return null;
        }
        /// <summary>
        /// 读取父节点下的第一个子节点的文本
        /// </summary>
        /// <param name="parentXmlNode"></param>
        /// <returns></returns>
        public static string ReadFirstChildNodeText(XmlNode parentXmlNode)
        {
            var childNodeTexts = ReadChildNodeTexts(parentXmlNode);
            if (childNodeTexts != null && childNodeTexts.Length > 0)
            {
                return childNodeTexts[0];
            }
            return null;
        }
        /// <summary>
        /// 读取父节点下的所有子节点的文本数组
        /// </summary>
        /// <param name="parentXmlNode"></param>
        /// <returns></returns>
        public static string[] ReadChildNodeTexts(XmlNode parentXmlNode)
        {
            if (parentXmlNode == null)
            {
                return null;
            }
            var childNodes = GetChildNodes(parentXmlNode);
            if (childNodes != null && childNodes.Count > 0)
            {
                var nodeCount = childNodes.Count;
                var nodeTexts = new string[nodeCount];
                for (var i = 0; i < nodeCount; i++)
                {
                    nodeTexts[i] = childNodes[i].InnerText;
                }
                return nodeTexts;
            }
            return null;
        }
        /// <summary>
        /// 读取XML节点文本
        /// </summary>
        /// <param name="xmlNode"></param>
        /// <returns></returns>
        public static string ReadNodeText(XmlNode xmlNode)
        {
            if (xmlNode == null)
            {
                return null;
            }
            return xmlNode.InnerText;
        }
        #endregion
        //========================================================= //
    }
View Code

 

转载于:https://www.cnblogs.com/baibanr/p/9474569.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值