XML及JSON扩展方法,方便快速解析

#region XML扩展方法
/// <summary>
/// 从xml节点中获取指定属性的数据,如果不存在该属性则返回默认值
/// </summary>
/// <typeparam name="T">xml数据的数据类型</typeparam>
/// <param name="xElement">节点</param>
/// <param name="attName">属性名称</param>
/// <param name="defaultValue">默认值</param>
/// <returns></returns>
public static T GetXmlAttr<T>(this XElement xElement, string attName, T defaultValue)
{
    if (xElement.Attribute(attName) == null)
    {
        return defaultValue;
    }
    return (T)Convert.ChangeType(xElement.Attribute(attName).Value, typeof(T));
}

/// <summary>
/// 从xml节点中获取指定节点的数据,如果不存在该节点则返回默认值
/// </summary>
/// <typeparam name="T">xml数据的数据类型</typeparam>
/// <param name="xElement">节点</param>
/// <param name="eleName">属性名称</param>
/// <param name="defaultValue">默认值</param>
/// <returns></returns>
public static T GetXmlElement<T>(this XElement xElement, XName eleName, T defaultValue)
{
    if (xElement.Element(eleName) == null)
    {
        return defaultValue;
    }
    return (T)Convert.ChangeType(xElement.Element(eleName).Value, typeof(T));
}

/// <summary>
/// 获得xml下的XElement节点,必须存在,如果不存在则抛出异常
/// </summary>
/// <param name="xElement"></param>
/// <param name="eleName"></param>
/// <returns></returns>
public static XElement GetXmlElement(this XElement xElement, XName eleName)
{
    var ele = xElement.Element(eleName);
    if (ele == null)
    {
        throw new ArgumentNullException("节点:" + GetXmlPath(xElement) + "不存在子节点" + eleName);
    }
    return ele;
}

public static XAttribute GetXmlAttribute(this XElement xElement, XName eleName)
{
    var ele = xElement.Attribute(eleName);
    if (ele == null)
    {
        throw new ArgumentNullException("节点:" + GetXmlPath(xElement) + "不存在子属性" + eleName);
    }
    return ele;
}

/// <summary>
/// 获取xml节点的路径
/// </summary>
/// <param name="xElement"></param>
/// <returns></returns>
public static string GetXmlPath(this XElement xElement)
{
    if (xElement.Parent == null)
    {
        return xElement.Name.ToString();
    }
    else
    {
        return GetXmlPath(xElement.Parent) + "/" + xElement.Name.ToString();
    }
}

/// <summary>
/// 根据xpath获取指定的xml节点,如果未找到该节点将抛出异常
/// </summary>
/// <param name="xmlNode"></param>
/// <param name="xpath"></param>
/// <param name="nsMgr"></param>
/// <returns></returns>
public static XmlNode GetXmlNode(this XmlNode xmlNode, string xpath, XmlNamespaceManager nsMgr)
{
    XmlNode node = xmlNode.SelectSingleNode(xpath, nsMgr);
    if (node == null)
    {
        throw new ArgumentNullException("节点:" + xmlNode.BaseURI + "不存在子节点" + xpath);
    }
    return node;
}

#endregion

#region JSON扩展方法

/// <summary>
/// 从JSON对象中获取指定属性名称的属性值并强转为指定对象,如果该属性不存在将抛出异常
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="jobject"></param>
/// <param name="proName">属性名称</param>
/// <returns></returns>
public static T get<T>(this JObject jobject, string proName)
{
    if (jobject[proName] == null)
    {
        throw new ArgumentNullException("解析JSON属性值不存在.属性值:" + proName);
    }
    return jobject[proName].Value<T>();
}

public static T get<T>(this JToken jToken, string proName)
{
    if (jToken[proName] == null)
    {
        throw new ArgumentNullException("解析JSON属性值不存在.属性值:" + proName);
    }
    return jToken[proName].Value<T>();
}

public static T get<T>(this JToken jToken, string proName, T defaultValue)
{
    if (jToken[proName] == null)
    {
        return defaultValue;
    }
    return jToken[proName].Value<T>();
}

/// <summary>
/// 从JSON对象中获取指定属性的值,如果该属性不存在将抛出异常
/// </summary>
/// <param name="jobject"></param>
/// <param name="proName">属性名称</param>
/// <returns></returns>
public static JToken get(this JObject jobject, string proName)
{
    if (jobject[proName] == null)
    {
        throw new ArgumentNullException("解析JSON属性值不存在.属性值:" + proName);
    }
    return jobject[proName];
}

public static JToken get(this JToken jtoken, string proName)
{
    if (jtoken[proName] == null)
    {
        throw new ArgumentNullException("解析JSON属性值不存在.属性值:" + proName);
    }
    return jtoken[proName];
}
#endregion

xml包含的功能

  1. 从xml节点中获取指定属性的数据,如果不存在该属性则返回默认值
  2. 从xml节点中获取指定节点的数据,如果不存在该节点则返回默认值
  3. 获得xml下的XElement节点,必须存在,如果不存在则抛出异常
  4. 获得xml下的Attribute节点,必须存在,如果不存在则抛出异常
  5. 获取xml节点的路径
  6. 根据xpath获取指定的xml节点,如果未找到该节点将抛出异常

json包含的功能

  1. 从JSON对象中获取指定属性名称的属性值并强转为指定对象,如果该属性不存在将抛出异常
  2. 从JSON对象中获取指定属性的值,如果该属性不存在将抛出异常
posted @ 2023-01-14 16:22  段江涛IT  阅读(68)  评论(0编辑  收藏  举报
页脚HTML代码