Skocz do zawartości

[MAXscript] tcp i XML - odczyt danych


SUPER_OkO

Rekomendowane odpowiedzi

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.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 3
  • Created
  • Ostatniej odpowiedzi

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

Odnośnik do komentarza
Udostępnij na innych stronach

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.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się



×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności