解析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)

 

 


本页地址:http://www.foxtable.com/mobilehelp/topics/0171.htm