我创建了一个程序,我从谷歌地图得到xml响应。一切都很顺利,休息是可以的,我可以正确编写xml文件,我也可以读取一个特定的xml节点,如果xml文件中有一些特殊字符则执行。在我的情况下,文件中的“België”中有“ë”。
可以做什么,能够读取包含这些类型字符的xml文件。更改“e”中的“ë”可能是一种解决方案,但也会有其他角色提供此问题。我正在寻找一个解决方案,所以我可以使用谷歌的原始回复。
非常感谢
我的代码如下所示
写文件
WriteXMLResponseFile(strResult)
读取特定节点
strStatus = ReadXMLData("/DistanceMatrixResponse/status")
用于写作和阅读的代码
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>
答案 0 :(得分:1)
您是否确定问题在于阅读文件以及您在哪里看到不正确的字符?
我的理论问题在于您对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
通过此更改,结帐&#34; C:\ TestOutputPath.txt&#34;在记事本的高级编辑器中,这些字符也会搞砸。
答案 1 :(得分:0)
这对我来说很有用,我将File.CreateText的输出更改为原始文件,并且可以使用。 非常感谢