Jump to content

[MAXscript] tcp i XML - odczyt danych


SUPER_OkO

Recommended Posts

Witam. Mam problem z odczytaniem danych, które to przechwytuję z serwera. Dane w tym momencie dostaję jako xml i za cholerę nie potrafię tego rozgryźć.

 

Na początku łączę się z serwerem, który to mi wysyła dane:

 

hejHo = dotNetObject "System.Net.Sockets.Socket" ( dotnetclass "System.Net.Sockets.AddressFamily" ).InterNetwork ( dotnetclass "System.Net.Sockets.SocketType" ).Stream ( dotnetclass "System.Net.Sockets.ProtocolType" ).Tcp

 

hejHo.Connect "127.0.0.1" 3000

 

ascii_decoder = dotNetObject "System.Text.ASCIIEncoding"

bytes = dotNetObject "System.Byte[]" 4096

result = hejHo.Receive bytes

return_text = ascii_decoder.GetString(bytes)

 

i w tym momnecie otrzymuję całą zawartość xml ale jako stringa.

 

"..."

 

Gdybym to zapisał sobie jako plik xml, to spokojnie potrafię odczytać dane. Ponieważ serwer wysyła dane na bierząco to chciałbym je odczytywać w locie. No i teraz

 

pytanie nr 1. Jak to zapisać inaczej żebym na końcu wartość nie była wypluwana jako string tylko hmmm.. jako kod xml zapisany w pamięci. Tak żebym mógł sobie odczytać dane jakoś tak daneXML.ChildNodes.item[0].ChildNodes.itemof[2].Attributes.itemof[1].value

 

No i pytanie2 Jak można przekonwertować takiego stringa XML do XML zapisując to w pamięci pomijając zapis do pliku.

 

Nie bijcie mnie po oczach, bo dopiero raczkuje w temacie DNet'a. Dzieki z góry za wszelkie komentarze, wskazówki gdzie szukać itd.

Link to comment
Share on other sites

  • Replies 3
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

pytanie nr 1. Jak to zapisać inaczej żebym na końcu wartość nie była wypluwana jako string tylko hmmm.. jako kod xml zapisany w pamięci. Tak żebym mógł sobie odczytać dane jakoś tak daneXML.ChildNodes.item[0].ChildNodes.itemof[2].Attributes.itemof[1].value

 

No i pytanie2 Jak można przekonwertować takiego stringa XML do XML zapisując to w pamięci pomijając zapis do pliku.

 

Pytania są równoznaczne ;) Rozumiem, że "kod xml zapisany w pamięci" to obiekt .NET ułatwiający operacje na XML? Ostatnio jak musiałem parsować XML (jakieś 2 lata temu ;) ) to LINQ był na topie. Tu masz przykład jak zainicjować System.Xml.Linq.XDocument przy pomocy stringa:

http://msdn.microsoft.com/en-us/library/bb299692.aspx

Link to comment
Share on other sites

Siedziałem wczoraj cały dzień i nic nie udało mi się uruchomić za pomocą linqa. Problem cały czas leżal w textReader'ze do którego nie mogłem wczytać cholernego stringa. Dzisiaj sprawdziłem jeszcze raz metody xmlDokumentu i sie okazało, że jest poprostu tam funkcja wczytująca ze stringa.. poprostu "loadxml".. wiec poki co wygląda ten kod tak:

 

hejHo = dotNetObject "System.Net.Sockets.Socket" ( dotnetclass "System.Net.Sockets.AddressFamily" ).InterNetwork ( dotnetclass "System.Net.Sockets.SocketType" ).Stream ( dotnetclass "System.Net.Sockets.ProtocolType" ).Tcp

hejHo.Connect "127.0.0.1" 3000

 

dotNet.loadAssembly "system.xml"

xmlDoc=dotNetObject "system.xml.xmlDocument"

 

ascii_decoder = dotNetObject "System.Text.ASCIIEncoding"

bytes = dotNetObject "System.Byte[]" 4096

result = hejHo.Receive bytes

return_text = ascii_decoder.GetString(bytes)

 

xmlDoc.loadxml(return_text)

docEle=xmlDoc.documentElement

docEle.ChildNodes.count

 

Wszystko działa bez problemu. Obszedłem "metodę" z linqu nie wiem czy dobrze czy źle i na ile to wszystko będzie działać szybko.. ale przynajmniej mogę iść dalej.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...

Important Information

We are using cookies. Read about our Privacy Policy