Ошибка отправки файла XML 'Данные на корневом уровне недействительны.Линия 1, позиция 39 ' - PullRequest
2 голосов
/ 02 августа 2011

Я пытаюсь отправить свой XML-файл через API. Я сделал это без проблем, используя приведенный ниже код, однако, когда я пытаюсь отправить ФАЙЛ, он не будет работать, я теперь получаю в браузере:

Data at the root level is invalid. Line 1, position 39.

Не пытаясь отправить файл работает:

' create the Xml that the Msxml2.serverXmlHttp object will send to the Webservice
dim Xml_to_Send
Xml_to_Send = "<?xml version=""1.0"" encoding=""utf-8"" ?>"
Xml_to_Send = Xml_to_Send & "<xmldata>"
Xml_to_Send = Xml_to_Send & "     <Products>"
Xml_to_Send = Xml_to_Send & "          <ProductCode>THE-TEST</ProductCode>"
Xml_to_Send = Xml_to_Send & "          <ProductPrice>100.00</ProductPrice>"
Xml_to_Send = Xml_to_Send & "     </Products>"
Xml_to_Send = Xml_to_Send & "</xmldata>"

oXMLHttp.Send(Xml_to_Send)

Но при попытке отправить ФАЙЛ НЕ работает, вот ПОЛНЫЙ код. Файл скопирован из кода выше, поэтому я знаю, что файл хорош:

    <%@ Page Title="MAIN" Language="vb" Explicit="true" AspCompat="true" %>
    <% 
Dim doc As XDocument = XDocument.Load("sample.xml")

    ' create the Msxml2.serverXmlHttp object needed to post the Xml to the WebService
    Dim oXMLHttp
    oXMLHttp = Server.CreateObject("Msxml2.serverXmlHttp")
    oXMLHttp.open("POST", "http://www.mysite.com/net/WebService.aspx?Login=mysite@mysite.com&EncryptedPassword=xxxx&Import=Update", False)
    oXMLHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8")
    oXMLHttp.setRequestHeader("Content-Action", "xmldata")
    oXMLHttp.setTimeouts(100000, 100000, 600000, 9999999)
    Server.ScriptTimeout = 10800

    ' Send the Xml  
    oXMLHttp.Send(String.Format("{0}\n\r{1}", doc.Declaration.ToString(), doc.ToString()))

    ' Receive the Xml
    Dim Xml_Returned
    Xml_Returned = oXMLHttp.responseText

    ' Validate the Xml
    Dim xmlDoc
    xmlDoc = Server.CreateObject("Msxml2.DOMDocument")
    xmlDoc.loadXML(Xml_Returned)
    If (Len(xmlDoc.text) = 0) Then
        Xml_Returned = ("<BR><B>ERROR in Response xml:<BR>ERROR DETAILS:</B><BR><HR><BR>") & Xml_Returned
    End If

    ' Display the Xml on the browser
    Response.Write(Xml_Returned)

    ' clean up
    Xml_to_Send = Nothing
    oXMLHttp = Nothing
    doc = Nothing
    xmlDoc = Nothing
    Xml_Returned = Nothing        
%>

UPDATE Я обновил приведенный выше код из ответа ниже. Я сейчас получаю в браузере:

Data at the root level is invalid. Line 1, position 39.

Вот XML, который я отправляю в качестве теста:

<xmldata>
  <Products>
    <ProductCode>AMN-ACE14</ProductCode>
    <ProductPrice>3800.00</ProductPrice>
  </Products>
</xmldata>

Ответы [ 2 ]

1 голос
/ 05 августа 2011

Я считаю, что вам нужно отправлять содержимое документа, а не объект XmlDocument (так как этот класс не сериализуем).Следующая строка должна выполнить трюк с использованием XDocument:

oXMLHttp.Send(string.Format("{0}\n\r{1}", doc.Declaration.ToString(), doc.ToString()))

При использовании XmlDocument будет работать следующий код:

Dim doc As XmlDocument

doc = New XmlDocument()
doc.Load("sample.xml")

oXMLHttp.Send(doc.OuterXml)
0 голосов
/ 02 августа 2011

Если ваш код выше, чем вы отправляете не XML, а строку, которая гласит «sample.xml»

oXMLHttp.Send("sample.xml")

Если вы отправляете объект документа?

oXMLHttp.Send(doc)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...