vb.net html转xml,VB.NET将JSON格式的字符串和XML文件相互转换

1.关于本文

这几天打算写一个工具类JsonXmlHelper,用来进行用XML来保存JSON格式文件的工作。该工具类中要实现2个最主要的函数:

1)将JSON格式的内容写入到地址为address的XML中:WriteJsonToXml

2)把函数1中构造的XML文件恢复成JSON格式文档:RecoverJsonFromXml

2.代码说明

1)添加引用:Newtonsoft.Json.dll

2)导入库

'JSON解析相关函数,需要添加引用Newtonsoft.Json.dll

Imports Newtonsoft.Json

Imports Newtonsoft.Json.Linq

'XMl解析相关函数

Imports System.Xml

3)在模块ModuleTest中建立类JsonXmlHelper

4)两个基础函数:

WriteToFile(将一个字符串的内容写入到文件)

ReadFromFile(从文件中读取内容赋值到一个字符串)

'''

''' 将字符串中内容写入到文件

''' 文件地址

''' 被写入文件的字符串

'''

Public Shared Sub WriteToFile(address As String, content As

String)

Try

Dim sw As IO.StreamWriter

sw = New IO.StreamWriter(address, False,

System.Text.Encoding.UTF8)

sw.Write(content)

sw.Close()

sw.Dispose()

Catch ex As

Exception

Throw New Exception(ex.Message)

End Try

End Sub

'''

''' 从文件中读取信息到字符串

'''

''' 文件地址

''' 读取到的字符串

'''

Public Shared Function ReadFromFile(address As String)

Try

Dim sr As IO.StreamReader

sr = IO.File.OpenText(address)

Return sr.ReadToEnd()

Catch ex As

Exception

Throw New Exception(ex.Message)

End Try

End Function

5)函数WriteJsonToXml的实现

'''

''' 将JSON格式的内容写入到地址为address的XML中

'''

''' 要存入的文件地址

''' 源JSON字符串

'''

Public Shared Sub WriteJsonToXml(address As String, json As

String)

'如果存在同名文件则先删除

If

IO.File.Exists(address) Then

IO.File.Delete(address)

End If

'建立XML文档

Dim writer As

XmlTextWriter =

New XmlTextWriter(address,

Text.Encoding.GetEncoding("GBK"))

writer.Formatting =

Xml.Formatting.Indented

writer.WriteStartDocument()

writer.WriteComment("这个XML文档中存储了一个JSON格式的信息")

'递归遍历JSON中的项并写入到XML中

writer.WriteStartElement("Root")

'将JSON字符串中内容写入到XML文档

WriteToXml(writer,

json)

writer.WriteEndElement()

'Root结点结束

writer.WriteEndDocument()

writer.Close()

'XML文档创建结束

End Sub

'''

''' 将一段JSON格式字符串写入到XML文件中

'''

'''

'''

'''

Private Shared Sub WriteToXml(writer As XmlTextWriter, json As

String)

Dim jobj As JObject =

JObject.Parse(json)

'遍历读取到的JSON字符串

For Each jtemp As

JProperty In jobj.Children

'根据读入的不同数据类型分类讨论

'Console.WriteLine(jtemp.Name.ToString & " "

& jtemp.Value.ToString)

Select Case jtemp.Value.Type

Case

JTokenType.Object

writer.WriteStartElement(jtemp.Name.ToString(), "")

writer.WriteAttributeString("Type", "Object")

WriteToXml(writer,

jtemp.Value.ToString)

writer.WriteEndElement()

Case

JTokenType.Array

writer.WriteStartElement(jtemp.Name.ToString(), "")

writer.WriteAttributeString("Type", "Array")

'遍历数组读取值

For i As Integer = 0 To

jtemp.Value.Count - 1

writer.WriteAttributeString("Value" & i,

jtemp.Value(i).ToString)

Next

writer.WriteEndElement()

Case

JTokenType.String

writer.WriteStartElement(jtemp.Name.ToString(), "")

writer.WriteAttributeString("Type", "String")

writer.WriteAttributeString("Value", jtemp.Value.ToString)

writer.WriteEndElement()

Case

JTokenType.Boolean

writer.WriteStartElement(jtemp.Name.ToString(), "")

writer.WriteAttributeString("Type", "Boolean")

writer.WriteAttributeString("Value", jtemp.Value.ToString)

writer.WriteEndElement()

Case

JTokenType.Integer

writer.WriteStartElement(jtemp.Name.ToString(), "")

writer.WriteAttributeString("Type", "Integer")

writer.WriteAttributeString("Value", jtemp.Value.ToString)

writer.WriteEndElement()

Case

JTokenType.Float

writer.WriteStartElement(jtemp.Name.ToString(), "")

writer.WriteAttributeString("Type", "Float")

writer.WriteAttributeString("Value", jtemp.Value.ToString)

writer.WriteEndElement()

Case

JTokenType.Null

writer.WriteStartElement(jtemp.Name.ToString(), "")

writer.WriteAttributeString("Type", "Null")

writer.WriteAttributeString("Value", jtemp.Value.ToString)

writer.WriteEndElement()

Case

Else

End Select

Next

End Sub

3.上面若干函数的调用示例

1)建立结构Person

Public Class Person

Public Name As String

'姓名

Public Age As Integer

'年龄

Public Sex_is_Male As

Boolean '性别

Public Structure

PartnerInfo '伙伴信息结构

Public Partner_Name As String '伙伴姓名

Public Partner_Age As Integer '伙伴年龄

Public Partner_Sex_is_Male As Boolean

'伙伴性别

End Structure

Public Partner As

PartnerInfo '伙伴

Public Achievement As

String()

'''

''' 构造函数

'''

'''

true:使用默认值,false:使用测试值

'''

Public Sub New(Optional

ByVal isDefault As Boolean = True)

Me.Name = IIf(isDefault, "", "Tsybius")

Me.Age = IIf(isDefault, 0, 23)

Me.Sex_is_Male = IIf(isDefault, True,

True)

Me.Partner.Partner_Name = IIf(isDefault, "",

"Galatea")

Me.Partner.Partner_Age = IIf(isDefault, 0,

21)

Me.Partner.Partner_Sex_is_Male = IIf(isDefault,

True, False)

Me.Achievement = IIf(isDefault, New String()

{},

New

String() {"ach1", "ach2", "ach3"})

End Sub

End Class

2)在Main函数中调用本文中的函数

Sub Main()

'将测试内容写入到文件test.txt中

JsonXmlHelper.WriteToFile("test.txt", "这是一段测试内容")

'从文件test.txt中读入内容

Console.WriteLine(JsonXmlHelper.ReadFromFile("test.txt"))

Console.WriteLine()

'建立Person结构实例

Dim p As Person = New

Person(False)

'将Person类型实例存储到json格式的字符串中(两种格式:不缩进、缩进)

Dim json1 As String

=

JsonConvert.SerializeObject(p,

Newtonsoft.Json.Formatting.None)

Dim json2 As String

=

JsonConvert.SerializeObject(p,

Newtonsoft.Json.Formatting.Indented)

'输出生成的字符串

Console.WriteLine(json1

& vbCrLf & vbCrLf & json2)

JsonXmlHelper.WriteJsonToXml("x.xml", json1)

Console.ReadLine()

End Sub

二、函数RecoverJsonFromXml

这两个函数被声明在类JsonXmlHelper中

'''

''' 将XML格式的内容存储到JSON格式的字符串中

'''

''' 要读取的XML文件地址

'''

Public Shared Function RecoverJsonFromXml(address As String)

As String

Dim xmlDoc = New

XmlDocument

xmlDoc.Load(address)

Dim xmlRoot As XmlNode =

xmlDoc.SelectSingleNode("Root")

Dim jtemp As JObject =

WriteToJson(xmlRoot)

Return

JsonConvert.SerializeObject(jtemp,

Newtonsoft.Json.Formatting.Indented)

End Function

'''

''' 中XmlNode类型中读取一个JObject类型数据的信息

'''

''' XML结点类型数据

''' JObject类型数据

'''

Private Shared Function WriteToJson(xNode As XmlNode) As

JObject

Dim jobj As New

JObject

For Each obj As Object

In xNode.ChildNodes

If obj.GetType.ToString =

"System.Xml.XmlElement" Then

'读取到XML结点

Dim xElmt

As XmlElement = obj

Select

Case xElmt.GetAttribute("Type")

Case "String"

'字符串型变量

jobj.Add(xElmt.Name,

xElmt.GetAttribute("Value"))

Case "Integer" '整型变量

jobj.Add(xElmt.Name,

Integer.Parse(xElmt.GetAttribute("Value")))

Case "Float"

'浮点型变量

jobj.Add(xElmt.Name,

Double.Parse(xElmt.GetAttribute("Value")))

Case "Boolean" '布尔型变量

jobj.Add(xElmt.Name,

IIf(xElmt.GetAttribute("Value") = "True",

New

JValue(True), New JValue(False)))

Case "Array"

'JSON数组

Dim jarr As JArray = New JArray()

For i As Integer = 0 To xElmt.Attributes.Count -

2

jarr.Add(New JValue(xElmt.GetAttribute("Value" &

i.ToString)))

Next

jobj.Add(xElmt.Name, jarr)

Case "Object"

'JSON对象

jobj.Add(xElmt.Name, WriteToJson(obj))

End

Select

ElseIf obj.GetType.ToString =

"System.Xml.XmlComment" Then

'读取到注释

Continue

For

Else

'其他情况

Continue

For

End If

Next

Return jobj

End Function

三、调用示例

Main代码

Sub Main()

Dim sJson As String =

JsonXmlHelper.RecoverJsonFromXml("x.xml")

Console.WriteLine(sJson)

Console.ReadLine()

End Sub

转:https://my.oschina.net/Tsybius2014/blog/295334?p={{currentPage+1}}

在VB6中处理JSON数据稍微有点复杂,因为VB6本身没有内置的JSON支持。不过,你可以使用一些第三方库或者API来处理JSON数据。例如,可以使用MSXML组件,或者通过调用JavaScript脚本来转换JSON数组和字符串。 这里是一个简单的例子,说明如何使用MSXML组件来解析JSON字符串,并将其转换为VB6中的数组或集合: ```vb ' 首先,需要引用Microsoft XML, v6.0库。 ' 在VB6中,可以通过以下步骤添加引用: ' 1. 在菜单栏中选择 Project -> References... ' 2. 找到并勾选 "Microsoft XML, v6.0" Dim xml As MSXML2.DOMDocument60 Set xml = New MSXML2.DOMDocument60 Dim jsonString As String jsonString = "[{""id"":1, ""name"":""Alice""}, {""id"":2, ""name"":""Bob""}]" ' 加载JSON字符串XML文档中 xml.async = False xml.loadXML(jsonString) ' 将XML文档的根节点设置为JSON数组 Set xml = xml.documentElement ' 遍历每个JSON对象节点 Dim objNode As MSXML2.IXMLDOMElement Dim objNodes As MSXML2.IXMLDOMElement Set objNodes = xml.selectNodes("*") For Each objNode In objNodes ' 获取每个对象的属性,例如id和name Dim id As String Dim name As String id = objNode.selectSingleNode("id").text name = objNode.selectSingleNode("name").text ' 这里可以根据需要处理id和name,例如将它们添加到VB6的数组或集合中 Next objNode ``` 请注意,上面的代码只是一个示例,实际上在使用之前需要确保你的JSON字符串格式是正确的,并且已经正确安装和引用了MSXML组件。 此外,如果处理的数据量较大或者需要频繁进行JSON数据的解析和生成,可以考虑编写自己的解析函数,或者使用更现代的编程语言(比如VB.NET或Python等)来处理这类任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值