SUPER_OkO Napisano 12 Grudzień 2010 Napisano 12 Grudzień 2010 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.
Polacco Napisano 12 Grudzień 2010 Napisano 12 Grudzień 2010 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
SUPER_OkO Napisano 12 Grudzień 2010 Autor Napisano 12 Grudzień 2010 Dzięki wielkie za odpowiedź, ogólnie dalej jeszcze nie rozumiem jak to zapisać w mxs ;). Ale już wiem przynajmniej "jak to powinno wyglądać" ;).
SUPER_OkO Napisano 13 Grudzień 2010 Autor Napisano 13 Grudzień 2010 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.
Rekomendowane odpowiedzi
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ę