Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取xml文件时发生vb net 2017错误_Xml_Vb.net_Utf 8_Special Characters - Fatal编程技术网

读取xml文件时发生vb net 2017错误

读取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响应。一切正常,响应正常,我可以正确地编写xml文件,也可以读取特定的xml节点,如果xml文件中有特殊字符,则除外。在我的例子中,当文件中的“België”中有一个“ë”时

可以做些什么,以便能够读取包含这些类型字符的xml文件。更改“e”中的“ë”可以是一个解决方案,但也会有其他字符给出这个问题。我正在寻找一个解决方案,这样我就可以使用谷歌的原始回复

非常感谢

我的代码如下所示

<?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文件是不正确的。它缺少了
的结束标记,
无法说明这是否是因为您使用了这些旧方法(我的测试表明,虽然这些方法不正确,但不会从文件
中删除标记)