Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Visual Basic XML - Zapis pliku xml

27 Lut 2015 11:44 2577 11
  • Poziom 9  
    Witam Ekspertów!

    Bardzo proszę o pomoc, chce zrealizować zapis wyników w pliku xml
    Jedyne do czego udało mi się dojść to zapis w pliku tekstowym. Na forach doszukałem się że trzeba najpierw stworzyć tabele a potem dopiero zapisywać... wszelkie próby zakończyły się fiaskiem :(

    Programik pobiera ze sterownika dane i zapisuje je w ten sposób:

    DM0000 1036
    DM0001 0318

    (nazwa / wartość)
    to w zasadzie się nie zmienia jedynie liczba linii

    część programu wygląda następująco:

    Dim str_out As String = ""
    txt_read2.Text = ""

    Try
    For I As Integer = 0 To reg_count - 1
    str_out = str_out & "DM" & (reg_start + I).ToString().PadLeft(4, "0"c) & " " & str_read.Substring(I * 4, 4) & vbNewLine
    Next

    Catch ex As Exception
    str_out = "No datat is available"
    End Try
    txt_read2.Text = str_out

    Dim a As String = "C:\test.txt"
    My.Computer.FileSystem.WriteAllText(a, txt_read2.Text, False)
  • Poziom 13  
    Plik xml ma swoją strukturę, którą musisz określić - roota, tagi, wartości, opisy itp.

    Xml można zrobić za pomocą generatorów albo po prostu zapisywać do pliku tekstowego. Nie podałeś w jaki programie piszesz.

    Przykład z WIKI:

    Kod: xml
    Zaloguj się, aby zobaczyć kod


    Nie jest to specjalnie skomplikowane, dlatego też dla prostych danych szybciej jest generować tagi kodem.
  • Poziom 9  
    Dzięki za szybką odpowiedź

    Programuję to w MS Visual Basic 2010 Express (programuję to za dużo powiedziane bardziej przerabiam gotowca…).

    Chciałem zgodnie z Twoją radą zapisać wartości od razu w pliku i prawie by się udało gdyby nie " cudzysłowy" VB wywala mi błąd :/

    gdyby plik wyglądał tak było by dobrze :


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

    <dane>

    <DM0000>0012</DM0000>
    <DM0001>0045</DM0001>
    <DM0002>0132</DM0002>
    <DM0003>1023</DM0003>
    <DM0004>2106</DM0004>

    </dane>


    a udaje mi się zapisać tylko tak:

    <?xml version=1.0 encoding=utf-8 ?>


    Jaki jest sposób aby obejść te cudzysłowy - zapisuje w VB tak:

    Dim str_out As String = " <?xml version=1.0 encoding=UTF-8?> " & vbNewLine & "<dane>" & vbNewLine

    ale wtedy nie ma poprawnego nagłówka :/

    Nagłówek powinien wyglądać tak:

    Dim str_out As String = " <?xml version=”1.0” encoding=”UTF-8”?> " & vbNewLine & "<dane>" & vbNewLine
  • Pomocny post
    Specjalista - VBA, Excel
    Witaj
    " = Chr(34)

    Dodano po 2 [minuty]:

    str_out = " <?xml version=” & Chr(34) & "1.0” & Chr(34) & "encoding=” & Chr(34) & "UTF-8” & Chr(34) & "?> "
    albo = "<?xml version=""1.0"" encoding=""UTF-8""?> "
  • Poziom 40  
    To DM0000, DM0001 to pewnie jakieś rejestry ze sterownika? Czy ich liczba będzie stała w tym pliku XML i czy ten układ co podałeś, jest "jedynym słusznym"?
  • Poziom 9  
    Dzięki! Super działa!
    Zgadza się ze sterownika Omron CQM1H docelowo liczba pobieranych rejestrów będzie różna jednak to nie będzie wpływało podejrzewam na xml’a ponieważ mam zrobiony nagłówek -> pętla pobierania rejestrów -> zakończenie.

    Przy okazji jeszcze jedno pytanie jak zapętlić program w nieskończoność (aż do zamknięcia) chodzi mi konkretnie tak:

    1. program się wykona
    2. odczeka np. 15 sekund
    3. wykona się ponownie

    tak w koło…

    nie potrafię tak ładnie wklejać kodu jak inni to robią więc dołączam plik jeśli miało by to ułatwić

    Pozdrawiam
    Marcin
  • Specjalista - VBA, Excel
    Witaj
    W ogóle, to pytanie do programistów VB, mam więcej VBA, ale te POBIERANIE - to reakcji na zdarzenia?
    Co było przyczyną zdarzenia form_Main Load? ..Load2 ..Load3.
    Moim zdaniem petli powinien organizować te zdarzenia, które powodują reakcję.

    Dodano po 10 [minuty]:

    marcin_rs napisał:
    zapętlić program w nieskończoność

    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Poziom 22  
    Dzień dobry. Zapis XML jest standardem więc nie ma sensu bawić się w pisanie algorytmów do zapisywania w takim formacie :)

    Napisałem takie makro, mam nadzieję, że się przyda:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Będziesz jedynie musiał dodać referencję do obsługi XML-a. U mnie robię to w menu Tools>References i z listy zaznaczam Microsoft XML 6.0

    Po odpaleniu plik wygląda tak:
    Code:
    <Dane><DM0000>0012</DM0000><DM0002>0045</DM0002><DM0003>1023</DM0003></Dane>
  • Poziom 13  
    pętlę trzeba przemyśleć pod kątem:

    1. akcji start/stop
    2. obsługi błędów i niepoprawnych wykonywań funkcji w petli

    W kodzie, pętla czytająca przy dowolnym błędzie zwróci
    str_out = "No datat is available"

    A co kiedy dane są ale są niepoprawne tylko np. niepełne?
    Nie sprawdzasz czy substring istnieje i czy długość str_read jest wielokrotnością 4.
  • Poziom 40  
    marcin_rs napisał:
    Co w tym kodzie jest nie tak:

    Niby działa poprawnie ale na pasku tytułowym znika nazwa a pojawia się zapisywany kod w pliku?
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod
    Sam tam zapisujesz...
  • Poziom 9  
    Witam po przerwie

    Dziękuję za okazaną pomoc wszystko działa jak należy.
    Gdy znajdę trochę czasu założę nowy temat,
    aby się pochwalić działaniem całości; zwłaszcza tym,
    którzy twierdzili, że "staruszka" Omron CQM1 nie da się wizualizować ;)

    Pozdrawiam!