2015-03-17 3 views
1

Мне сложно разобрать некоторые простые XML-данные, отправляемые обратно cc-терминалом.Недопустимые символы в пути при разборе строки xml

Вот данные мне дали ответ:

"<PLCardPresent>0</PLCardPresent><PLEntryMode>1</PLEntryMode><PLNameOnCard>FRANKINSON/FRANK </PLNameOnCard><AmountDue>0</AmountDue><TipAmount>0</TipAmount><CashBackAmout>0</CashBackAmout><MerchantFee>0</MerchantFee><TaxAmount>0</TaxAmount><ExpDate>1219</ExpDate><ECRRefNum>666</ECRRefNum>" 

Я пытаюсь разобрать его с этим:

Dim myXmlDoc As New XmlDocument 
myXmlDoc.Load(r.ExtData) 
Dim ExpDate As String = ReturnXmlValue(myXmlDoc, "ExpDate") 
Dim NameOnCard As String = ReturnXmlValue(myXmlDoc, "PLNameOnCard") 

Мой метод:

Protected Function ReturnXmlValue(ByVal myXDoc As Xml.XmlDocument, ByVal field As String) As String 
    Dim retval As String = String.Empty 

    Try 

     Dim node As Xml.XmlNodeList = myXDoc.GetElementsByTagName(field) 
     If node IsNot Nothing And node.Count > 0 Then 
     retval = node.Item(0).InnerText 
     End If 

    Catch ex As Exception 
     WriteException(ex) 
     Throw 
    End Try 

    Return retval 
    End Function 

Ошибки есть происходит при загрузке документа xml.

Я не разбираюсь в этом правильном пути?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Так как это было предложено, чтобы проверить нулевые терминаторов, я сделал следующее изменение, которое я надеюсь, что имелось в виду:

Dim test As String = r.ExtData.Replace(ControlChars.NullChar, String.Empty) 
    Dim myXmlDoc As New XmlDocument 
    myXmlDoc.Load(test) 

Я до сих пор получил I ошибки упоминание в названии.

Что касается r.ExtData, это строка данных, которая начинается с того, что я выделил выше.

Dim r As PaymentResponse = posl.PaymentResponse 

Что дает мне что-то похоже на это:

enter image description here

+0

Что такое 'r.ExtData', который вы используете для загрузки данных XML? – Steve

+0

Я ответил на сообщение вам два. Ty для ваших комментариев. – ErocM

+0

Вы используете неправильный метод. 'Load' принимает имя файла, а не строку XML. – Dai

ответ

3

Вашей строка не является допустимым XML.

XML должен иметь один единственный корневой элемент. Yours имеет много элементов XML на корневом уровне:

<PLCardPresent>0</PLCardPresent> 
<PLEntryMode>1</PLEntryMode> 
<PLNameOnCard>FRANKINSON/FRANK </PLNameOnCard> 
<AmountDue>0</AmountDue> 
<TipAmount>0</TipAmount> 
<CashBackAmout>0</CashBackAmout> 
<MerchantFee>0</MerchantFee> 
<TaxAmount>0</TaxAmount> 
<ExpDate>1219</ExpDate> 
<ECRRefNum>666</ECRRefNum> 

Вы можете обойти это, добавив начало корневого элемента в начале и корневой элемент закрытия в конце, так что он выглядит как

<root> 
    <PLCardPresent>0</PLCardPresent> 
    <PLEntryMode>1</PLEntryMode> 
    <PLNameOnCard>FRANKINSON/FRANK </PLNameOnCard> 
    <AmountDue>0</AmountDue> 
    <TipAmount>0</TipAmount> 
    <CashBackAmout>0</CashBackAmout> 
    <MerchantFee>0</MerchantFee> 
    <TaxAmount>0</TaxAmount> 
    <ExpDate>1219</ExpDate> 
    <ECRRefNum>666</ECRRefNum> 
</root> 

Второго , обратите внимание на основное различие между этими двумя методами

xml.Load(filename); // Filename as string 
xml.LoadXml(xmlcontent); // XML as string 
+1

Я сделал оба изменения, которые вы предложили, и они отлично работали. TYVM! – ErocM

Смежные вопросы