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包含的功能
- 从xml节点中获取指定属性的数据,如果不存在该属性则返回默认值
- 从xml节点中获取指定节点的数据,如果不存在该节点则返回默认值
- 获得xml下的XElement节点,必须存在,如果不存在则抛出异常
- 获得xml下的Attribute节点,必须存在,如果不存在则抛出异常
- 获取xml节点的路径
- 根据xpath获取指定的xml节点,如果未找到该节点将抛出异常
json包含的功能
- 从JSON对象中获取指定属性名称的属性值并强转为指定对象,如果该属性不存在将抛出异常
- 从JSON对象中获取指定属性的值,如果该属性不存在将抛出异常