2017-06-08 4 views
0

Ich habe ein Programm erstellt, wo ich XML-Antworten von Google Maps bekomme. Alles ist gut gelaufen, die Antwort ist in Ordnung, ich kann die XML-Datei korrekt schreiben, und ich kann auch einen bestimmten XML-Knoten lesen, außer wenn es ein Sonderzeichen in der XML-Datei gibt. In meinem Fall, wenn es ein "ë" in "België" in der Datei gibt.vb net 2017 Fehler beim Lesen von XML-Datei

Was kann getan werden, um XML-Dateien mit dieser Art von Zeichen darin lesen zu können. Ändern der "ë" in "e" kann eine Lösung sein, aber es gibt andere Charaktere, die dieses Problem auch geben. Ich suche nach einer Lösung, damit ich die ursprüngliche Antwort von Google verwenden kann.

Vielen Dank

meinen Code als

die

WriteXMLResponseFile(strResult) 

lesen

strStatus = ReadXMLData("/DistanceMatrixResponse/status") 

de Code zum Schreiben und Lesen

bestimmten Knotendatei schreiben folgt aussieht
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 

Die XML-Datei sieht wie folgt aus

<?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

Was passiert also, wenn Sie versuchen, eine solche XML-Datei zu lesen? –

+2

Warum verwenden Sie nicht die geeigneten Methoden aus dem NET Framework, um Dateien zu schreiben? Diese alten Methoden aus der PRE VB6-Ära sind nicht die beste Möglichkeit, XML-Dateien mit Unicode-Zeichen korrekt zu schreiben. – Steve

+2

Die XML-Datei wie oben ist falsch. Es fehlen die schließenden Tags für '' und '' Nicht möglich zu sagen, wenn Sie diese alten Methoden verwenden oder nicht (mein Test legt nahe, dass diese Methoden die Tags nicht entfernen, obwohl sie nicht korrekt sind aus der Datei ' Steve

Antwort

1

Sind Sie sicher, dass das Problem ist, die Datei in das Lesen und wo sehen Sie die unsachgemäß Zeichen?

Meine Theorie ist das Problem liegt bei Ihren Aufrufen von PrintLine (wie schreibe ich in Dateien in VB6 - aber es ist veraltet).

diesen Versuchen Sie stattdessen,

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 

Mit dieser Änderung Kasse "C: \ TestOutputPath.txt" in einem erweiterten Editor wie Notepad wird auch diese Zeichen faulenzen auf.

0

Dies funktioniert für mich, ich habe die Ausgabe von File.CreateText auf das Original geändert und es funktioniert. Vielen Dank