首页 > 其他分享 >XML及JSON扩展方法,方便快速解析

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

时间:2023-01-14 16:33:31浏览次数:50  
标签:XML xml return proName xElement 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对象中获取指定属性的值,如果该属性不存在将抛出异常

标签:XML,xml,return,proName,xElement,JSON,解析,节点,属性
From: https://www.cnblogs.com/duanjt/p/17052012.html

相关文章

  • oracle rowid字段解析
    文档课题:oraclerowid字段解析.1、相关概念rowid是一行数据的唯一标识,是数据的详细地址,通过rowid可快速定位某行数据的具体位置.其可分为物理rowid和逻辑rowid.普通堆表的r......
  • 一个使用Win32api的简单乐谱解析器
    音调数据enumscale{Rest=0,A0=21,A0s=22,B0=23, C1=24,C1s=25,D1=26,D1s=27,E1=28,F1=29,F1s=30,G1=......
  • org.bson.json.JsonParseException: JSON reader was expecting a name but found ‘,
    问题执行JSON转化时报这个错原因自己写的这个JSON转换不对,不符合JSON格式,但是我的给我报错位置和实际错误位置差了几行,导致找了半天,觉得自己写的没问题,注释掉发现确实有个地......
  • json转map
    java中map和json互转工具类,注意方法示例的格式(这里是最简单的无嵌套的格式),不满足此格式的不合适:packagecom.yscredit.sz.util;importcom.alibaba.fastjson.JSON;importor......
  • python实战-解析swagger-api接口信息
    *coding:UTF-8*"""@project->file:city-test->swagger_api_parse_backup@Author:qinmin.vendor@Date:2023/1/1217:55@Desc......
  • underscore源码解析之二: underscore是如何实现防抖的?
    前言Underscore是一个JavaScript库,提供了各种函数式编程辅助工具。它提供的功能之一是防抖,这是一种限制函数执行频率的技术。在本文中,我们将探讨Underscore如何实现......
  • Python 如何使用 BeautifulSoup 实现解析二手房详情页信息并存储文件
    一、实战场景Python如何使用BeautifulSoup实现解析二手房详情页信息并存储文件二、知识点Python基础语法Python文件读写BeautifulSoup解析网页requests发送网络请求......
  • python-标准库json模块的使用
    python-标准库json模块1.标准库json模块JSON是一种轻量级数据交换格式,一般API返回的数据大多是JSON、XML,如果返回JSON的话,需将获取的数据转换成字典,方面在程序中处理......
  • fastjson绕过-2
    前言这里的话就多介绍几种绕过的机制吧,然后原理的话就稍微分析一下,因为绕过的版本太多了,绕过的方法虽然有所不同但最终都是对代码的恶意解读嘛1.2.25绕过先看一下1.2.25......
  • axios 处理响应( 流文件或 json)
    今天遇到一前端问题。axios导出后台xls文件出现乱码。多会儿没写发现前端了,发现是【没指定响应类型时,axios默认把响应内容包成字符串,即type(res.data)='string'】,......