2017-10-10 133 views
0

我得到的輸入流沒有正確的格式xml錯誤,在我的planets.xml中沒有錯誤的位置。 Visual Studio 2017 4.7框架。 WCF已安裝。 link(在IDE中出錯)使用streamreader加載xml時,它給了我位置19,10處的錯誤,它是子類型字段的<。 link(inside planets.xml)剛剛嘗試過使用xmlreader,新錯誤是位置18,35,這是光譜和Class(單詞)之間的結束標記。我失去了這一點,在這裏和網上的其他門票通常你可以立即看到他們的XML文件中的錯誤,但沒有什麼是跳出我的問題。在Xml文檔中有錯誤(19,10)輸入不正確的格式

Planets.xml(短段,3146個行星)

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<planets> 
    <planet> 
     <name>A Place</name> 
     <xcood>-123.764</xcood> 
     <ycood>272.182</ycood> 
    </planet> 
    <planet> 
     <name>Abadan</name> 
     <xcood>-70.319</xcood> 
     <ycood>-95.949</ycood> 
     <pressure>3</pressure> 
     <gravity>1.03</gravity> 
     <lifeForm>7</lifeForm> 
     <climate>2</climate> 
     <percentWater>63</percentWater> 
     <temperature>22</temperature> 
     <spectralClass>F</spectralClass> 
     <subtype>1</subtype> 
     <luminosity>V</luminosity> 
     <sysPos>5</sysPos> 
     <socioIndustrial>C-C-D-C-C</socioIndustrial> 
     <landMass>Abadan Major (Abbasid)</landMass> 
     <landMass>Abadan Minor</landMass> 
     <landMass>Kuran Major</landMass> 
     <landMass>Kuran Minor</landMass> 
     <hpg>B</hpg> 
    </planet> 
</planets> 

Planets.vb

'''<remarks/> 
<System.SerializableAttribute(), 
System.ComponentModel.DesignerCategoryAttribute("code"), 
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=True), 
System.Xml.Serialization.XmlRootAttribute("planets", IsNullable:=False)> 
Partial Public Class Planets 

    Private planetField() As planetsPlanet 

    '''<remarks/> 
    <System.Xml.Serialization.XmlElementAttribute("planet")> 
    Public Property planet() As planetsPlanet() 
     Get 
      Return Me.planetField 
     End Get 
     Set 
      Me.planetField = Value 
     End Set 
    End Property 
End Class 

'''<remarks/> 
<System.SerializableAttribute(), 
System.ComponentModel.DesignerCategoryAttribute("code"), 
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=True)> 
Partial Public Class planetsPlanet 

    Private n As String 
    Private x As Decimal 
    Private y As Decimal 
    Private a As String 
    Private o As String 
    Private f As String 
    Private fC As planetsPlanetFactionChange 
    Private p As Integer 
    Private g As Decimal 
    Private nC As Boolean 
    Private zC As Boolean 
    Private lF As Integer 
    Private c As Integer 
    Private pW As Integer 
    Private t As Integer 
    Private sC As Char 
    Private sT As Integer 
    Private l As Char 
    Private sP As Integer 
    Private sI As String 
    Private s As String 
    Private lM As String 
    Private HPG As Char 
    Private d As String 

    <System.Xml.Serialization.XmlElementAttribute("name", GetType(String))> 
    Public Property name() As String 

     Get 
      Return Me.n 
     End Get 
     Set(value As String) 
      Me.n = value 
     End Set 

    End Property 

    <System.Xml.Serialization.XmlElementAttribute("xcood", GetType(Decimal))> 
    Public Property xcood() As Decimal 

     Get 
      Return Me.x 
     End Get 
     Set(value As Decimal) 
      Me.x = value 
     End Set 

    End Property 

    <System.Xml.Serialization.XmlElementAttribute("ycood", GetType(Decimal))> 
    Public Property ycood() As Decimal 

     Get 
      Return Me.y 
     End Get 
     Set(value As Decimal) 
      Me.y = value 
     End Set 

    End Property 

    <System.Xml.Serialization.XmlElementAttribute("axis", GetType(String))> 
    Public Property axis() As String 

     Get 
      Return Me.a 
     End Get 
     Set(value As String) 
      Me.a = value 
     End Set 

    End Property 

    <System.Xml.Serialization.XmlElementAttribute("orbit", GetType(String))> 
    Public Property orbit() As String 

     Get 
      Return Me.o 
     End Get 
     Set(value As String) 
      Me.o = value 
     End Set 

    End Property 

    <System.Xml.Serialization.XmlElementAttribute("faction", GetType(String))> 
    Public Property faction() As String 

     Get 
      Return Me.f 
     End Get 
     Set(value As String) 
      Me.f = value 
     End Set 

    End Property 

    <System.Xml.Serialization.XmlElementAttribute("factionChange", GetType(planetsPlanetFactionChange))> 
    Public Property factionChange() As planetsPlanetFactionChange 

     Get 
      Return Me.fC 
     End Get 
     Set(value As planetsPlanetFactionChange) 
      Me.fC = value 
     End Set 

    End Property 

    <System.Xml.Serialization.XmlElementAttribute("pressure", GetType(Integer))> 
    Public Property pressure() As Integer 

     Get 
      Return Me.p 
     End Get 
     Set(value As Integer) 
      Me.p = value 
     End Set 

    End Property 

    <System.Xml.Serialization.XmlElementAttribute("gravity", GetType(Decimal))> 
    Public Property gravity() As Decimal 

     Get 
      Return Me.g 
     End Get 
     Set(value As Decimal) 
      Me.g = value 
     End Set 

    End Property 

    <System.Xml.Serialization.XmlElementAttribute("nadirCharge", GetType(Boolean))> 
    Public Property nadirCharge() As Boolean 

     Get 
      Return Me.nC 
     End Get 
     Set(value As Boolean) 
      Me.nC = value 
     End Set 

    End Property 

    <System.Xml.Serialization.XmlElementAttribute("zenithCharge", GetType(Boolean))> 
    Public Property zenithCharge() As Boolean 

     Get 
      Return Me.zC 
     End Get 
     Set(value As Boolean) 
      Me.zC = value 
     End Set 

    End Property 

    <System.Xml.Serialization.XmlElementAttribute("lifeForm", GetType(Integer))> 
    Public Property lifeForm() As Integer 

     Get 
      Return Me.lF 
     End Get 
     Set(value As Integer) 
      Me.lF = value 
     End Set 

    End Property 

    <System.Xml.Serialization.XmlElementAttribute("climate", GetType(Integer))> 
    Public Property climate() As Integer 

     Get 
      Return Me.c 
     End Get 
     Set(value As Integer) 
      Me.c = value 
     End Set 

    End Property 

    <System.Xml.Serialization.XmlElementAttribute("percentWater", GetType(Integer))> 
    Public Property percentWater() As Integer 

     Get 
      Return Me.pW 
     End Get 
     Set(value As Integer) 
      Me.pW = value 
     End Set 

    End Property 

    <System.Xml.Serialization.XmlElementAttribute("temperature", GetType(Integer))> 
    Public Property temperature() As Integer 

     Get 
      Return Me.t 
     End Get 
     Set(value As Integer) 
      Me.t = value 
     End Set 

    End Property 

    <System.Xml.Serialization.XmlElementAttribute("spectralClass", GetType(Char))> 
    Public Property spectralClass() As Char 

     Get 
      Return Me.sC 
     End Get 
     Set(value As Char) 
      Me.sC = value 
     End Set 

    End Property 

    <System.Xml.Serialization.XmlElementAttribute("subtype", GetType(Integer))> 
    Public Property subtype() As Integer 

     Get 
      Return Me.sT 
     End Get 
     Set(value As Integer) 
      Me.sT = value 
     End Set 

    End Property 

    <System.Xml.Serialization.XmlElementAttribute("luminosity", GetType(Char))> 
    Public Property luminosity() As Char 

     Get 
      Return Me.l 
     End Get 
     Set(value As Char) 
      Me.l = value 
     End Set 

    End Property 

    <System.Xml.Serialization.XmlElementAttribute("sysPos", GetType(Integer))> 
    Public Property sysPos() As Integer 

     Get 
      Return Me.sP 
     End Get 
     Set(value As Integer) 
      Me.sP = value 
     End Set 

    End Property 

    <System.Xml.Serialization.XmlElementAttribute("socioIndustrial", GetType(String))> 
    Public Property socioIndustrial() As String 

     Get 
      Return Me.sI 
     End Get 
     Set(value As String) 
      Me.sI = value 
     End Set 

    End Property 

    <System.Xml.Serialization.XmlElementAttribute("satellite", GetType(String))> 
    Public Property satellite() As String 

     Get 
      Return Me.s 
     End Get 
     Set(value As String) 
      Me.s = value 
     End Set 

    End Property 

    <System.Xml.Serialization.XmlElementAttribute("landMass", GetType(String))> 
    Public Property landMass() As String 

     Get 
      Return Me.lM 
     End Get 
     Set(value As String) 
      Me.lM = value 
     End Set 

    End Property 

    <System.Xml.Serialization.XmlElementAttribute("hpg", GetType(Char))> 
    Public Property HPGStation() As Char 

     Get 
      Return Me.HPG 
     End Get 
     Set(value As Char) 
      Me.HPG = value 
     End Set 

    End Property 

    <System.Xml.Serialization.XmlElementAttribute("desc", GetType(String))> 
    Public Property desc() As String 

     Get 
      Return Me.d 
     End Get 
     Set(value As String) 
      Me.d = value 
     End Set 

    End Property 

End Class 

'''<remarks/> 
<System.SerializableAttribute(), 
System.ComponentModel.DesignerCategoryAttribute("code"), 
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=True)> 
Partial Public Class planetsPlanetFactionChange 

    Private dateField As String 

    Private factionField As String 

    '''<remarks/> 
    Public Property [date]() As String 
     Get 
      Return Me.dateField 
     End Get 
     Set 
      Me.dateField = Value 
     End Set 
    End Property 

    '''<remarks/> 
    Public Property faction() As String 
     Get 
      Return Me.factionField 
     End Get 
     Set 
      Me.factionField = Value 
     End Set 
    End Property 
End Class 

objPlanets.vb(這裏我想序列化XML)

Imports System.IO 
Imports System.Xml 
Imports System.Xml.Serialization 

Class objPlanets 

    Private Sub serialPlanets() 

     Dim serial As New XmlSerializer(GetType(Planets)) 
     Dim p As Planets 
     Dim reader As XmlReader = XmlReader.Create(My.Application.Info.DirectoryPath & "\Planets\planets.xml") 
     Do While reader.Read() 

      p = serial.Deserialize(reader) 

     Loop 
     reader.Close() 

     For Each planet In p.planet() 

      If planet.axis() = String.Empty Then 

       planet.axis = getAxis() 

      Else 

       Continue For 

      End If 

     Next 

     Using fs As New FileStream(My.Application.Info.DirectoryPath & "\Planets\planets.xml", FileMode.Truncate) 

      serial.Serialize(fs, p) 

     End Using 

    End Sub 

    Private Function getAxis() As String 

     Select Case roll2D6() 

      Case 2 To 6 

       Return "Tilted" 

      Case 7 To 12 

       Return "No Tilt" 

      Case Else 

       Return "Error" 

     End Select 

    End Function 

    Private Function getOrbit() As String 

     Select Case roll2D6() 

      Case 2 To 6 

       Return "Elliptical" 

      Case 7 To 12 

       Return "Circular" 

      Case Else 

       Return "Error" 

     End Select 

    End Function 

    Private Function roll2D6() As Integer 

     Dim rollResult1 As Integer = CInt((Rnd() * 5) + 1) 
     Dim rollResult2 As Integer = CInt((Rnd() * 5) + 1) 
     Return rollResult1 + rollResult2 

    End Function 

    Public Sub New() 

     serialPlanets() 

    End Sub 

End Class 
+0

與您的問題無關,但您可以通過不提供Get和Set(或End Property)來簡化所有屬性。 VB會爲你創建私有成員,並將其命名爲你的屬性,但帶有前導下劃線。 (例如,公共屬性Blah as String將創建一個隱含的_Blah變量) – dwilliss

+0

我沒有看到XML的任何錯誤。你確定你正在閱讀的文件實際上與你展示的文件相同嗎? – dwilliss

+0

哦,整齊,如果沒有所有的get和set'rs就沒那麼簡單了。我甚至需要每個屬性上面的所有序列化?我沒有這些之前,並將它們添加回來(粘貼XML作爲類使整個表和我無法訪問的東西)試圖使這項工作,但沒有改變。是的,我只是雙重檢查,這是我告訴它讀取的確切的XML文件。它對我沒有任何意義。 – BLOODWOLF

回答

1

你的問題是Char類型的屬性。雖然你的xml數據在這些屬性中只有一個字母,但它是一個String。數據值需要是一個表示UTF-8字符的整數。

<spectralClass>F</spectralClass>應該<spectralClass>70</spectralClass>

它可能會更容易改變你所有的Char類型屬性String類型。

1

好吧,重新鍵入錯誤位置線後,然後注意到上面和下面的線,我有se t接受我猜串行化不喜歡的字符。將其更改爲字符串。

<System.Xml.Serialization.XmlElementAttribute("spectralClass", GetType(String))> 
Public Property spectralClass() As String 

<System.Xml.Serialization.XmlElementAttribute("subtype", GetType(Integer))> 
Public Property subtype() As Integer 

<System.Xml.Serialization.XmlElementAttribute("luminosity", GetType(String))> 
Public Property luminosity() As String 

然後開始給我新的錯誤立場和發現誰進入一些各種行星有時被分類爲「不錯,不錯,或真」真田它誤那些因此不得不改變他們全部爲真。現在,它很好的爲我寫出了一個更完整的planets.xml。現在我非常感謝你們,我可以再次開始取得進展。