簡體   English   中英

格式化 XML 響應 VB.NET

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM