读取xml文件时vb net 2017错误

时间:2017-06-08 19:57:48

标签: xml vb.net utf-8 special-characters

我创建了一个程序,我从谷歌地图得到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>

2 个答案:

答案 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的输出更改为原始文件,并且可以使用。 非常感谢