2016-07-13 4 views
0

Der folgende Code gibt mir passt. Ich entfernte das Übergepäck und postete nur die relevanten Teile.lesen XML-Datei ohne Wert im Feld vb.net

sQuickPath = Server.MapPath("~/App_Data/BillCalculator.xml") 
Dim xrXMLReader As XmlReader = XmlReader.Create(sQuickPath) 
While xrXMLReader.Read() 
    If xrXMLReader.NodeType = XmlNodeType.Element And xrXMLReader.Name = "ServiceType" Then 
     Dim ql As XElement = CType(XNode.ReadFrom(xrXMLReader), XElement) 
     If IsDBNull(ql.Element("ProposedCustomerCharge").Value) Then 
      ProposedCustomerCharge = 0.0 
     ElseIf IsNothing(ql.Element("ProposedCustomerCharge").Value) Then 'Check doesn't find empty element 
      ProposedCustomerCharge = 0.0 
     ElseIf ql.Element("ProposedCustomerCharge").Value Is Nothing Then 
      ProposedCustomerCharge = 0.0 
     Else 
      ProposedCustomerCharge = CType(ql.Element("ProposedCustomerCharge").Value, Double) 'blows chunks 
     End If 
    End If 
End While 
xrXMLReader.Close() 
xrXMLReader = Nothing 

Ich habe jede Art und Weise versuchte ich mir vorstellen kann, den Wert von ProposedCustomerCharge auf Null, wenn das XML-Feld keinen Wert, aber IsNothing hat und ist nichts nicht das leere Feld Wert zu finden.

Das Feld in der XML-Datei sieht wie folgt aus:

<ProposedCustomerCharge></ProposedCustomerCharge> 

Wie kann ich das leere Feld finden?

Antwort

0

Hier waren einige Dinge falsch. Zuerst; Ich habe den Code nicht ausreichend berücksichtigt. Die Linie
war an der falschen Stelle, aber Sie konnten nicht sagen von, was ich bekanntgab. Ich habe das Dim für ql am Anfang des Subs platziert und ihm einen Wert innerhalb der Schleife gegeben. Ich habe nie versucht, es außerhalb der Schleife zu verwenden, aber aus irgendeinem Grund wurde es normalerweise auf nichts eingestellt.

Das hat mich innerhalb der If aber immer noch kein Spiel geben. Ich fügte hinzu
ElseIf ql.Element("ProposedCustomerCharge").IsEmpty Then ProposedCustomerCharge = 0.0
Was ich daraus gelernt habe ist, dass IsEmpty nicht nach einer leeren Zeichenfolge sucht. Wenn das Element existiert, leer oder nicht, gibt es false zurück. Ich fand schließlich heraus, dass das, was ich brauchte, war:
ElseIf ql.Element("ProposedCustomerCharge").Value = "" Then ProposedCustomerCharge = 0.0
Das stimmte und legte den Wert von ProposedCustomerCharge auf einen doppelten Wert von 0,0 fest.

Ich habe auch gelernt, dass das XML, das ich bekomme, nicht die beste Syntax verwendet.
<ProposedCustomerCharge></ProposedCustomerCharge> sollte <ProposedCustomerCharge />

sein