2014-09-25 86 views
0

我有下面的代碼,它作爲一個下拉列表中選擇事件,格式化XML響應VB.NET

'calling ersal webservice for banks 
Dim service As New IMPALA.IMPALA 
Dim bank As String 
bank = service.Remittance_Bank(username, password, pin, code, txtbenfadd.Text) 
'MsgBox(bank) 
'formating the xml responce 
Dim formater As StringBuilder 
formater = New StringBuilder() 
formater.Append("<?xml version=""1.0"" encoding=""UTF-8""?><root>") 
formater.Append(bank) 

formater.Append(""" /></root>") 
'MsgBox(formater.ToString) 
Dim xmlDoc = XElement.Parse(formater.ToString) 
Dim root As IEnumerable(Of XElement) = xmlDoc.Elements() 
Dim names As StringBuilder 
Dim names1 As StringBuilder 
names = New StringBuilder 
names1 = New StringBuilder 
For Each row In root 
    Dim attr As XAttribute 
    Dim attr2 As XAttribute 
    For Each attr In root.Attributes("BANK_CODE").AsEnumerable 

     names.Append(attr.Value + "|") 
    Next 
    For Each attr2 In root.Attributes("BANK_NAME").AsEnumerable 

     names1.Append(attr2.Value + "|") 
    Next 
Next 
Dim strArr() As String 
Dim strArr1() As String 
strArr = names.ToString.Split("|") 
strArr1 = names1.ToString.Split("|") 
Dim itemsList As ArrayList 
itemsList = New ArrayList() 
itemsList.Add(strArr) 
itemsList.Add(strArr1) 
'MsgBox(names.ToString) 
For count = 0 To strArr1.Length - 1 
    ddlbank.Items.Add(strArr1(count)) 
    ddlbnkcode.Items.Add(strArr(count)) 
Next 

我只是取決於來自Web服務的一種XML響應發現的錯誤。下面是一個示例響應

<row BANK_CODE="111" BANK_NAME="KENYAN BANK"/> 
<row BANK_CODE="121" BANK_NAME="EAST BANK"/> 
<row BANK_CODE="185" BANK_NAME="NAKUMATT BANK"/> 
<row BANK_CODE="125" BANK_NAME="KENYAN CONSUMER BANK"/> 
<row BANK_CODE="174 

當響應是上面的代碼工作 因爲我已經與格式追加,但在響應很好地關閉,像下面

<row BANK_CODE="111" BANK_NAME="KENYAN BANK"/> 
<row BANK_CODE="121" BANK_NAME="EAST BANK"/> 
<row BANK_CODE="185" BANK_NAME="NAKUMATT BANK"/> 
<row BANK_CODE="125" BANK_NAME="KENYAN CONSUMER BANK"/> 
<row BANK_CODE="174" BANK_NAME="TUSKYS BUYERS BANK"> 

我得到以下錯誤:

Name cannot begin with the '"' character, hexadecimal value 0x22. Line 1, position 2078.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Xml.XmlException : Name cannot begin with the '"' character, hexadecimal value 0x22. Line 1, position 2078.

Source Error:

Line 83: formater.Append(""" />") 
Line 84: 'MsgBox(formater.ToString) 
Line 85: Dim xmlDoc = XElement.Parse(formater.ToString) 
Line 86: Dim root As IEnumerable(Of XElement) = xmlDoc.Elements() 
Line 87: Dim names As StringBuilder

任何幫助,請在我可以檢查XML響應之前,我可以追加結尾部分或捕獲異常,並繼續。

+0

因此,您有一個函數'Remittance_Bank'返回一個無效的XML,在中間裁剪,然後通過添加缺少的雙引號和關閉標記來完成此XML。當函數返回有效的完整XML時,代碼將失敗。這應該是相反的,你應該在不完整的XML上失敗,刪除添加雙引號的代碼,並修復'Remittance_Bank'以始終返回有效的XML。 – GSerg 2014-09-25 11:44:41

回答

0

喜GSerg我沒有什麼,因爲網絡的服務回報我融入別人s'的制度時,我想出了一個辦法由edditing這樣

Dim formater As StringBuilder 
     formater = New StringBuilder() 
     formater.Append("<?xml version=""1.0"" encoding=""UTF-8""?><root>") 
     formater.Append(bank) 
     Dim xmlDoc As XElement 

     If bank.EndsWith("/>") Then 
      Try 
       formater.Append("</root>") 
       xmlDoc = XElement.Parse(formater.ToString) 
      Catch 
       MsgBox("INVALID XML") 
      End Try 
     ElseIf bank.EndsWith("<row ") Then 
      Try 
       formater.Append(" /></root>") 
       xmlDoc = XElement.Parse(formater.ToString) 
      Catch 
       MsgBox("INVALID XML") 
      End Try 
     ElseIf bank.EndsWith("<row") Then 
      Try 
       formater.Append(" /></root>") 
       xmlDoc = XElement.Parse(formater.ToString) 
      Catch 
       MsgBox("INVALID XML") 
      End Try 
     Else 
      Try 
       formater.Append(""" /></root>") 
       xmlDoc = XElement.Parse(formater.ToString) 
      Catch 
       MsgBox("INVALID XML") 
      End Try 
     End If 
     'just displaying the fromatted xml to see the end result for test purposes 
     MsgBox(formater.ToString) 

代碼來捕獲一些錯誤的控制雖然還是我的代碼休息的時候,我得到

<row BANK_CODE="111" BANK_NAME="KENYAN BANK"/> 
<row BANK_CODE="121" BANK_NAME="EAST BANK"/> 
<row BANK_CODE="185" BANK_NAME="NAKUMATT BANK"/> 
<row BANK_CODE="125" BANK_NAME="KENYAN CONSUMER BANK"/> 
<row BANK_CODE 

例如 你會知道我可以作爲下拉文本和代碼值獲得銀行的名字,因爲他們不匹配不同的下拉菜單顯示它們與彼此