解析XML
现在互联网的数据传递,JSON的使用率已经远远超过XML,我也推荐大家使用JSON。
但是微信有点奇葩,有的接口是XML,有的是JSON,开发者需要处理两种类型的数据,而且有时还需要转换。
为了提高大家的学习和开发效率,我们增加了一个新的类型XObject,让大家可以将XML数据直接作为JSON数据进行解析。
XObject和JObject在数据解析方面是完全相同的,可以说唯一差别就是类名不同,几乎不需要额外的学习就能掌握。
如果你熟悉.net,可以直接用.net的相关类库进行XML的解析和生成,也一样的简单,效率会更高一些。
至于普通用户,还是用XObject来得快捷方便。
由于Foxtable和System.XML.Linq命名空间都有名为XObject的类,实际使用时为避免冲突,必须加上命名空间Foxtable,例如:
Dim
xo As Foxtable.XObject
示例一
解析简单的XML。
源XML数据结构:
<XML>
<to>George</to>
<from>John</from>
<content>Don't forget the meeting!</content>
</XML>
在命令窗口执行下面的代码:
Dim
xml As
String =
"<xml><to>George</to><from>John</from><content>Don't forget the
meeting!</content></xml>"
Dim
xo As
Foxtable.XObject = Foxtable.XObject.Parse(xml)
Output.Show(xo("to"))
Output.Show(xo("from"))
Output.Show(xo("content"))
显示的结果为:
George
John
Don't forget the meeting!
可以看到解析XML和解析JSON的方法几乎是一样的。
示例二
嵌套XML的解析,源XML数据结构:
<XML>
<公司>宏兴贸易</公司>
<部门>
<名称>销售部</名称>
<员工>张三</员工>
<员工>李四</员工>
</部门>
<部门>
<名称>行政部</名称>
<员工>王五</员工>
<员工>赵六</员工>
</部门>
</XML>
在命令窗口执行以下代码:
Dim
xml As
String =
"<xml><公司>宏兴贸易</公司><部门><名称>销售部</名称><员工>张三</员工><员工>李四</员工></部门>"
xml
= xmL &
"<部门><名称>行政部</名称><员工>王五</员工><员工>赵六</员工></部门></xml>"
Dim
xo As
Foxtable.XObject = Foxtable.XObject.Parse(xml)
Output.Show(xo("公司"))
For
Each bm
As JToken
In xo("部门")
Output.show(bm("名称"))
For Each
yg As
JToken In
bm("员工")
Output.Show(yg)
Next
Next
显示的结果为:
宏兴贸易
销售部
张三
李四
行政部
王五
赵六
在解析XML的过程中,同一父节点之下的同名结点,会被解析为一个数组,为了验证这一点,可以在命令窗口执行:
Dim
xml As
String =
"<xml><公司>宏兴贸易</公司><部门><名称>销售部</名称><员工>张三</员工><员工>李四</员工></部门>"
xml =
xmL &
"<部门><名称>行政部</名称><员工>王五</员工><员工>赵六</员工></部门></xml>"
Dim
xo As
Foxtable.XObject = Foxtable.XObject.Parse(xml)
Output.Show(xo.ToString())
显示的结果为:
{
"公司":
"宏兴贸易",
"部门":
[
{
"名称":
"销售部",
"员工":
[
"张三",
"李四"
]
},
{
"名称":
"行政部",
"员工":
[
"王五",
"赵六"
]
}
]
}
可以看到,部门和员工,都是以JSON数组的形式存在,其中部门是对象数组,员工是值数组。
通过上面的代码,大家也可以看到将XML数据转为JSON数据是多么的简单。
既然是数组,就可以用JArray进行解析:
Dim
xml As
String =
"<xml><公司>宏兴贸易</公司><部门><名称>销售部</名称><员工>张三</员工><员工>李四</员工></部门>"
xml =
xmL &
"<部门><名称>行政部</名称><员工>王五</员工><员工>赵六</员工></部门></xml>"
Dim
xo As
Foxtable.XObject = Foxtable.XObject.Parse(xml)
Output.Show(xo("公司"))
Dim
bms As
JArray = xo("部门")
For
i As
Integer = 0
To bms.Count
- 1
Output.show(bms(i)("名称"))
Dim
ygs As
JArray = bms(i)("员工")
For n
As Integer =
0 To
ygs.Count -
1
Output.Show(ygs(n))
Next
Next
当然用For Each语句处理起来更加简洁一些。
我们可以直接用索引提取数据,例如第一个部门的第二个员工,可以表示为:
Dim nm As String = xo("部门")(0)("员工")(1)