解析xml字符串时路径中的非法字符

时间:2015-03-17 19:10:07

标签: xml vb.net

我很难解析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 doc的负载上。

我没有以正确的方式解析这个问题吗?

附加信息

由于有人建议我检查空终止符,我做了以下更改,我希望这是改变的意思:

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

我仍然收到了标题中提到的错误。

至于什么是r.ExtData,它是以我在上面突出显示的数据行开始的。

Dim r As PaymentResponse = posl.PaymentResponse

这给了我类似的东西:

enter image description here

1 个答案:

答案 0 :(得分:3)

您的字符串无效XML。

XML需要有一个单独的根元素。你的根级别有很多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