Just nu i M3-nätverket
Gå till innehåll

Problem att läsa XML data från http post


csone

Rekommendera Poster

Hejsan

Jag har ett problem när jag vill läsa en http post med xml data. Om jag läser in en xml fil direkt från disk är det inga problem men att begära med Request funkar inte. Är det någon som har ett tips så mottages detta tacksamt?

 

Detta felmeddelande får jag "-1072896682 - Ogiltig vid högsta nivån i dokumentet."

 

Finns det något sätt att bara skriva ut allt som kommer med http post'en? Typ som från vanligt post formulär response.write(request.form))?

 

Detta är min kod

 

Dim xmlDoc, i, ReturnValue, xmlDocError, root

Dim Location

Set xmlDoc = Server.CreateObject("MSXML2.DOMDocument")

xmlDoc.async = False

xmlDoc.setProperty "ServerHTTPRequest", true

ReturnValue = xmlDoc.Load(request) Denna funkar inte

'ReturnValue = xmlDoc.Load ("C:\cg\details.xml") Denna funkar som det är tänk

Länk till kommentar
Dela på andra webbplatser

<%@ Language=VBScript %>
<html>
<head>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
</head>
<body>
<table border="1">
<%
Dim p
For Each p in Request.Form
	Response.Write(vbTab & "<tr>" & vbCrLf & vbTab & vbTab & "<td>" & p & "</td><td>" & Request.Form(p) & "</td>" & vbCrLf & vbTab & "</tr>" & vbCrLf)
Next
%>
</table>
</body>
</html>

 

Har du något exempel på hur xml-koden ser ut när den postas? På felmeddelandet så låter det som att det inte kommer in någon xml-kod alls.

Länk till kommentar
Dela på andra webbplatser

details.xmlPrecis, det känns som det inte kommer med någonting.

Det är alltså en enhet för tempmätning som postar http post med xml data. På enhetens webbgränssitt finns länk till xml filen som postas. Exakt hur datan ser ut i själva http posten vet jag inte med xml filen bifogar jag.

Länk till kommentar
Dela på andra webbplatser

Du menar "ReturnValue = xmlDoc.Load(request)")

Det är alltså här jag vill ladda xml datan från request. Har försökt googla om det skall vara någon annan syntax t ex request.xml eller något men hittar förvånasvärt lite.

 

Detta är första gången som jag försöker hämta in xml data men jag hade tänkt att jag kunde hämta data ung. som vanlig formulärpost. T ex om jag vill hämta all data i http post - request.form()

Länk till kommentar
Dela på andra webbplatser

Aha! Nu kom vi på något. Du måste antagligen skriva något i stil med

ReturnValue = xmlDoc.Load(Request.Form("xml"))

Jag har ett jättebra exempel på jobbet hur man gör. Men jag har hunnit gå redan. Om ingen har skickat en lösning tills imorgon bitti så får du en lösning då.

Länk till kommentar
Dela på andra webbplatser

xmlDoc.Load förväntar sig en sträng innehållandes sökvägen till en xmlfil som ligger på servern.

Länk till kommentar
Dela på andra webbplatser

Here we go! LoadXml är kanske något. Men som sagt, det beror lite på vad du egentligen postar. Postar du själva xml-koden, då är det nog denna metod du ska använda.

Länk till kommentar
Dela på andra webbplatser

Du har säkert löst det redan. Men som sagt, för att läsa in xml-kod i ett MSXML dokument så gör du som följer

Set oXML = Server.CreateObject("MSXML2.DomDocument.4.0")
oXML.async = true

oXML.loadXML Request.Form("xml")

Men om du istället har en länk till ditt xml-dokument så gör du följande

    Set m_oXML = Server.CreateObject("MSXML2.DomDocument.4.0")
   m_oXML.async = False
   m_oXML.setProperty "ServerHTTPRequest", True

   m_oXML.Load m_strXmlSource

Länk till kommentar
Dela på andra webbplatser

Nope, vill fortfarande inte fungera.

oXML.loadXML blir false och error code blir "-1072896680 - XML document must have a top level element.

URL="

 

Jag vet att enheten postar något för jag sparar oXML.loadXML i databasen.

 

:blink:

 

Bifogar en skärmdump på post config sidan i hårdvaran.

 

Primära målet är alltså att spara ner xml data poster i databasen. Kanske finns något annat sätt t ex med Python?

post-7424-0-36983800-1333444760_thumb.jpg

Länk till kommentar
Dela på andra webbplatser

Python spelar ingen roll om det är fel på xml:en. Men den verkar bara bli knas när den postas. Börja med att se till att göra en Trim() på xml. Post har en förmåga att lägga till lite skräptecken. Det märks speciellt när man kör klassisk asp.

 

Är du även helt tusen procent säker på att du läser in rätt postvariabel? Dvs är det säkert att det är Request.Form("xml") där koden ligger?

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

I den XML-fil du postat hittar jag ingen xml-deklaration längst upp. Har den bara fallit bort? Lägg till annars.

Länk till kommentar
Dela på andra webbplatser

Python spelar ingen roll om det är fel på xml:en. Men den verkar bara bli knas när den postas. Börja med att se till att göra en Trim() på xml. Post har en förmåga att lägga till lite skräptecken. Det märks speciellt när man kör klassisk asp.

 

Är du även helt tusen procent säker på att du läser in rätt postvariabel? Dvs är det säkert att det är Request.Form("xml") där koden ligger?

 

Nope, det är jag inte... Det enda jag har är hur XML filen ser ut på hårdvaruenheten samt post config sidan. Exakt hur http posten ser ut vet jag inte.

 

Fick med en snutt PHP som skulle visa vad som postades men det blir inget där heller. Börjar tro att det inte postas något relevant. (något postas efter som jag får nya poster i databasen)

 

Så här ser php scriptet ut som skall visa vad som postas.

 

<?php

$chay_fileName = "uploads/" . basename( $_FILES['tcServerData']['tmp_name']) . ".csv";

move_uploaded_file($_FILES['tcServerData']['tmp_name'], $chay_fileName);

 

echo '<HTML> TCServer HTTP Post Test<br>Here is what I received:<br>';

echo '<pre>';

print_r($_FILES);

// readfile($chay_fileName);

echo '</pre>';

echo '</html>';

?>

Länk till kommentar
Dela på andra webbplatser

I den XML-fil du postat hittar jag ingen xml-deklaration längst upp. Har den bara fallit bort? Lägg till annars.

 

Är det xmlns du menar?

Länk till kommentar
Dela på andra webbplatser

Hmmm... Den där php-koden verkar hantera komma-separerade filer och inte xml-filer. Det skulle ju vara ett tecken på varför du inte kan läsa xml-filen. Och eftersom du inte vet hur post ser ut så är det prio ett.

 

Det exempel jag skickade tidigare där jag loopar igenom Request.Form samlingen, du får nog göra det och av resultatet skapa en logg-fil som visar exakt vilka fält som postas och vad dessa fält innehåller. Och då kan du komma vidare och hitta din data.

 

Och xml-deklarationen Ajuna frågar efter är nog <?xml version="1.0" ?>... Tror jag i alla fall.

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon
Och xml-deklarationen Ajuna frågar efter är nog <?xml version="1.0" ?>... Tror jag i alla fall.

Japp, det stämmer.

Länk till kommentar
Dela på andra webbplatser

Hmmm... Den där php-koden verkar hantera komma-separerade filer och inte xml-filer. Det skulle ju vara ett tecken på varför du inte kan läsa xml-filen. Och eftersom du inte vet hur post ser ut så är det prio ett.

 

Det exempel jag skickade tidigare där jag loopar igenom Request.Form samlingen, du får nog göra det och av resultatet skapa en logg-fil som visar exakt vilka fält som postas och vad dessa fält innehåller. Och då kan du komma vidare och hitta din data.

 

Och xml-deklarationen Ajuna frågar efter är nog <?xml version="1.0" ?>... Tror jag i alla fall.

 

Tyvärr... jag provade din loop utan framgång. Nåväl, jag får tacka för att Ni har lagt ner tid och energi. Om jag får in några värden så uppdaterar jag tråden. Tills dess - sköt om Er.

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Tyvärr... jag provade din loop utan framgång. Nåväl, jag får tacka för att Ni har lagt ner tid och energi. Om jag får in några värden så uppdaterar jag tråden. Tills dess - sköt om Er.

 

Men har du lagt till deklarationen? Väldigt många XML-metoder i olika språk kräver nämligen att den finns där och det är precis avsaknaden av denna deklaration som är ditt felmeddelande (deklarationen är just "top-level-element"). Således borde med stor sannolikhet åtminstone DET felmeddelandet vara löst om du gör som jag föreslog.

Länk till kommentar
Dela på andra webbplatser

Men har du lagt till deklarationen? Väldigt många XML-metoder i olika språk kräver nämligen att den finns där och det är precis avsaknaden av denna deklaration som är ditt felmeddelande (deklarationen är just "top-level-element"). Således borde med stor sannolikhet åtminstone DET felmeddelandet vara löst om du gör som jag föreslog.

 

Den fanns med... "<?xml version="1.0" encoding="UTF-8" ?> "

När jag klickade på länken i hårdvaras webbgränssnitt i Chrome och kopierade filens innehåll visades av någon anledning inte den översta raden. När jag tittar på den i IE visas den av någon anledning. Kruxet är att det inte känns som den postar något.

Om nån där ute vill ha en http post för att känna "first hand" pekar jag gladligen om.

Länk till kommentar
Dela på andra webbplatser

Ok, har kollat lite på trafiken och postat data. Var tvungen att bygga om lite :)

Nu tar skriptet (på adressen ovan) emot postade XML-filer.

 

Dock är detta som sagt beroende av en korrekt formaterad XML-fil.

Det första som står i en sådan fil skall vara en XML-deklaration, t.ex:

<?xml version="1.0" encoding="UTF-8" ?>

Vad jag kan se så skickar din makapär inte med det :(

Länk till kommentar
Dela på andra webbplatser

Fastnade i hockeyn...

 

Ok, det visar sig att klassisk asp är illa lämpad för detta så man måste jobba sig runt det en hel del.

Men nu har jag iaf fått det att fungera se http://code.eforum.kicks-ass.net/335480/

 

Vilka nyckel/värde-par är det som du vill ha ut och vad vill du göra med dem?

Länk till kommentar
Dela på andra webbplatser

Fastnade i hockeyn...

 

Ok, det visar sig att klassisk asp är illa lämpad för detta så man måste jobba sig runt det en hel del.

Men nu har jag iaf fått det att fungera se http://code.eforum.kicks-ass.net/335480/

 

Vilka nyckel/värde-par är det som du vill ha ut och vad vill du göra med dem?

 

Ahhh.... helt outstanding :thumbsup:

Jag vill ha alla värden instoppade i en databas post. Detta är en tempnod med det kan komma med upp till 8 tempnoder

 

Cluster for president!

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...