[英]Formatting XML Response 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">
我收到以下錯誤:
名稱不能以
'"'
字符開頭,十六進制值 0x22。第 1 行,位置 2078。說明:在執行當前 Web 請求期間發生未處理的異常。 請查看堆棧跟蹤以獲取有關錯誤及其在代碼中的來源的更多信息。
異常詳細信息:
System.Xml.XmlException
:名稱不能以'"'
字符開頭,十六進制值 0x22。第 1 行,位置 2078。源錯誤:
第 83 行:formater.Append(""" />")\n第 84 行:'MsgBox(formater.ToString)\n第 85 行:Dim xmlDoc = XElement.Parse(formater.ToString)\n第 86 行:將根變暗為 IEnumerable(Of XElement) = xmlDoc.Elements()\n第 87 行:將名稱變暗為 StringBuilder
在我可以附加結束部分或捕獲異常並繼續之前,請幫助我如何檢查 XML 響應。
嗨,GSerg,我無法控制網絡服務返回的內容,因為我正在集成到其他人的系統中,我想出了一種通過編輯這樣的代碼來捕獲一些錯誤的方法
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
例如,您是否知道我如何將銀行名稱作為下拉列表中的文本和代碼作為值,因為在不同的下拉列表中顯示它們,它們彼此不匹配
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.