读取xml文件时发生vb net 2017错误
我创建了一个程序,从谷歌地图获取xml响应。一切正常,响应正常,我可以正确地编写xml文件,也可以读取特定的xml节点,如果xml文件中有特殊字符,则除外。在我的例子中,当文件中的“België”中有一个“ë”时 可以做些什么,以便能够读取包含这些类型字符的xml文件。更改“e”中的“ë”可以是一个解决方案,但也会有其他字符给出这个问题。我正在寻找一个解决方案,这样我就可以使用谷歌的原始回复 非常感谢 我的代码如下所示读取xml文件时发生vb net 2017错误,xml,vb.net,utf-8,special-characters,Xml,Vb.net,Utf 8,Special Characters,我创建了一个程序,从谷歌地图获取xml响应。一切正常,响应正常,我可以正确地编写xml文件,也可以读取特定的xml节点,如果xml文件中有特殊字符,则除外。在我的例子中,当文件中的“België”中有一个“ë”时 可以做些什么,以便能够读取包含这些类型字符的xml文件。更改“e”中的“ë”可以是一个解决方案,但也会有其他字符给出这个问题。我正在寻找一个解决方案,这样我就可以使用谷歌的原始回复 非常感谢 我的代码如下所示 <?xml version="1.0" encoding="UTF-8
<?xml version="1.0" encoding="UTF-8"?>
<DistanceMatrixResponse>
<status>OK</status>
<origin_address>Henleykaai, 9000 Gent, Belgi뼯origin_address>
<destination_address>Nieuwstraat, 1000 Brussel, Belgi뼯destination_address>
<row>
<element>
<status>OK</status>
<duration>
<value>2709</value>
<text>45 min.</text>
</duration>
<distance>
<value>54752</value>
<text>54,8 km</text>
</distance>
<duration_in_traffic>
<value>2504</value>
<text>42 min.</text>
</duration_in_traffic>
</element>
</row>
</DistanceMatrixResponse>
写文件
WriteXMLResponseFile(strResult)
读取特定节点
strStatus = ReadXMLData("/DistanceMatrixResponse/status")
写和读的de代码
Public Sub WriteXMLResponseFile(ByVal responseData As String, Optional ByVal fileName As String = "\Data\Response.xml")
Dim intFileNr As Integer
intFileNr = FreeFile()
Try
FileOpen(intFileNr, Application.StartupPath & fileName, OpenMode.Output)
PrintLine(intFileNr, responseData)
Catch ex As Exception
MessageBox.Show("The file :" & vbCrLf & Application.StartupPath & fileName & vbCrLf & "does not exist", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1)
End Try
FileClose(intFileNr)
End Sub
Function ReadXMLData(ByVal dataNode As String, Optional ByVal fileName As String = "\Data\Response.xml") As String
Dim xDoc As XmlDocument = New XmlDocument()
Try
xDoc.Load(Application.StartupPath & fileName)
ReadXMLData = xDoc.SelectSingleNode(dataNode).InnerText
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Function
XML文件如下所示
<?xml version="1.0" encoding="UTF-8"?>
<DistanceMatrixResponse>
<status>OK</status>
<origin_address>Henleykaai, 9000 Gent, Belgi뼯origin_address>
<destination_address>Nieuwstraat, 1000 Brussel, Belgi뼯destination_address>
<row>
<element>
<status>OK</status>
<duration>
<value>2709</value>
<text>45 min.</text>
</duration>
<distance>
<value>54752</value>
<text>54,8 km</text>
</distance>
<duration_in_traffic>
<value>2504</value>
<text>42 min.</text>
</duration_in_traffic>
</element>
</row>
</DistanceMatrixResponse>
好啊
亨利凯,9000根,贝尔吉뼯来源地址>
尼乌斯特拉特,1000布鲁塞尔,贝尔吉뼯目的地地址>
好啊
2709
45分钟。
54752
54.8公里
2504
42分钟。
您是否确定问题出在读取文件时,以及您在哪里看到的字符不正确
我的理论是,问题在于对PrintLine的调用(这是我在VB6中写入文件的方式,但它已被弃用)
试试这个
Public Sub WriteXMLResponseFile(ByVal responseData As String, Optional ByVal fileName As String = "\Data\Response.xml")
Dim intFileNr As Integer
intFileNr = FreeFile()
Try
'FileOpen(intFileNr, Application.StartupPath & fileName, OpenMode.Output)
'PrintLine(intFileNr, responseData)
Dim writer As StreamWriter = File.CreateText("C:\TestOutputPath.txt")
writer.WriteLine(responseData)
writer.Close
Catch ex As Exception
MessageBox.Show("The file :" & vbCrLf & Application.StartupPath & fileName & vbCrLf & "does not exist", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1)
End Try
FileClose(intFileNr)
End Sub
通过此更改,在高级编辑器中签出“C:\TestOutputPath.txt”,因为记事本也会弄乱这些字符。这对我来说是可行的,我已经将File.CreateText的输出更改为原始文件,并将其改为。
非常感谢那么当您尝试读取这样的XML文件时会发生什么呢?为什么不使用NET Framework中的适当方法来编写文件呢?那些来自VB6之前时代的旧方法不是正确编写包含Unicode字符的XML文件的最佳方法。上面的XML文件是不正确的。它缺少了
的结束标记,
无法说明这是否是因为您使用了这些旧方法(我的测试表明,虽然这些方法不正确,但不会从文件中删除标记)