xml文件通过Xpath获取节点的值

本文详细介绍了如何使用XPath表达式从XML文件中精确地获取节点的内联文本和外部XML。通过多种实用函数,如GetNodeInnerTextByXpath、GetNodeOuterXmlByXpath等,读者将学会在不同场景下灵活运用这些技巧,实现数据的快速检索与处理。

介绍xml文件通过Xpath获取节点的值

调用示例:

 object str = CommonHelper.GetNodeInnerTextFromNodeByXpath(node.ParentNode, "/BODY/ZSXM");

 

通用代码如下:

/// <summary>
        /// 根据Xpath获取CDATA中的值
        /// </summary>
        /// <param name="strXmlText">xml字符串</param>
        /// <param name="strXpath">Xpath表达式</param>
        /// <returns></returns>
        public static string GetCDataInnerText(string strXmlText, string strXpath)
        {
            string strResult = string.Empty;
            XmlDocument doc = new XmlDocument
            {
                InnerXml = strXmlText
            };
            XmlNode nDataNode = doc.SelectSingleNode(strXpath);
            if (!Equals(nDataNode, null))
            {
                if (nDataNode.HasChildNodes)
                {
                    if (nDataNode.FirstChild is XmlCDataSection nDataSection)
                    {
                        strResult = nDataSection.InnerText;
                    }
                }
            }
            return strResult;
        }
 

 

    /// <summary>
        /// 根据Xpath获取CDATA中的值
        /// </summary>
        /// <param name="strXmlText">xml字符串</param>
        /// <param name="strCdataXpath">查找CDATA</param>
        /// <param name="strNodeXpath">查找NODE</param>
        /// <returns></returns>
        public static string GetNodeFromCDataInnerText(string strXmlText, string strCdataXpath, string strNodeXpath)
        {
            try
            {
                string nodeValue = string.Empty;
                string strResult = GetCDataInnerText(strXmlText, strCdataXpath);
                if (!string.IsNullOrEmpty(strResult))
                {
                    XmlDocument doc = new XmlDocument
                    {
                        InnerXml = strResult
                    };
                    XmlNode nDataNode = doc.SelectSingleNode(strNodeXpath);
                    if (!Equals(nDataNode, null))
                    {
                        nodeValue = nDataNode.InnerXml;
                    }
                }
                return nodeValue;
            }
            catch
            {
                return string.Empty;
            }
        }

        /// <summary>
        /// 获取节点的值
        /// </summary>
        /// <param name="strXmlText">The string XML text.</param>
        /// <param name="xpath">The xpath.</param>
        /// <returns></returns>
        public static string GetNodeInnerTextByXpath(string strXmlText, string xpath)
        {
            string strReslt = string.Empty;
            if (!string.IsNullOrEmpty(strXmlText))
            {
                XmlDocument doc = new XmlDocument
                {
                    InnerXml = strXmlText
                };
                XmlNode node = doc.SelectSingleNode(xpath);
                if (!Equals(node, null))
                {
                    strReslt = node.InnerText;
                }
            }
            return strReslt;
        }

        /// <summary>
        /// 获取节点的值
        /// </summary>
        /// <param name="strXmlText">The string XML text.</param>
        /// <param name="xpath">The xpath.</param>
        /// <returns></returns>
        public static string GetNodeOuterXmlByXpath(string strXmlText, string xpath)
        {
            string strReslt = string.Empty;
            if (!string.IsNullOrEmpty(strXmlText))
            {
                XmlDocument doc = new XmlDocument
                {
                    InnerXml = strXmlText
                };
                XmlNode node = doc.SelectSingleNode(xpath);
                if (!Equals(node, null))
                {
                    strReslt = node.InnerText;
                }
            }
            return strReslt;
        }

        /// <summary>
        /// 获取节点的值
        /// </summary>
        /// <param name="strXmlText">The string XML text.</param>
        /// <param name="xpath">The xpath.</param>
        /// <returns></returns>
        public static XmlNode GetNodeByXpath(string strXmlText, string xpath)
        {
            if (!string.IsNullOrEmpty(strXmlText))
            {
                XmlDocument doc = new XmlDocument
                {
                    InnerXml = strXmlText
                };
                XmlNode node = doc.SelectSingleNode(xpath);
                return node;
            }
            return null;
        }

         /// <summary>
        /// 获取节点的值
        /// </summary>
        /// <param name="nodeVNode">The node v node.</param>
        /// <param name="xpath">The xpath.</param>
        /// <returns></returns>
        public static object GetNodeInnerTextFromNodeByXpath(XmlNode nodeVNode, string xpath)
        {
            object strReslt = string.Empty;
            if (!Equals(nodeVNode, null))
            {
                XmlDocument doc = new XmlDocument
                {
                    InnerXml = nodeVNode.OuterXml
                };
                XmlNode node = doc.SelectSingleNode(xpath);
                if (!Equals(node, null))
                {
                    strReslt = node.InnerText;
                }
            }
            return strReslt;
        }

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值