介紹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;
}