Problem z odczytem strumienia podanego jako parametr.

0

Mam do zrobienia projekt i zatrzymałem się na rzeczy najprostszej wydawałoby się, bo metodologię mam taką, najpierw zabieram się za najtrudniejsze. Muszę wczytać xml w postaci jakby argumentu, ale nie mam pojęcia jak go odczytać. Dla zobrazowania, muszę zrobić coś takiego:

program.exe

cmd -> program.exe <?xml version="1.0" encoding="UTF-8"?>
<ksiazka-telefoniczna kategoria="bohaterowie książek">
 <!-- komentarz -->
  <osoba charakter="dobry">
    <imie>Ambroży</imie>
    <nazwisko>Kleks</nazwisko>
    <telefon>123-456-789</telefon>
  </osoba>
  <osoba charakter="zły">
    <imie>Alojzy</imie>
    <nazwisko>Bąbel</nazwisko>
    <telefon/>
  </osoba>
</ksiazka-telefoniczna>

Czyli dostaję na wejściu strumień i muszę go jakoś wczytać.
Nie jest to argument, bo są spacje, nie mogę zrobić pętli while i czekać na pusty znak, np. tak:

while (buffer != "")
            {
                buffer = Console.Read().ToString();
                xmlInput += buffer;
            }

Bo puste znaki są dozwolone przecież, a ja muszę wczytac cały strumień a nie do pierwszej spacji. Nie mogę w while sprawdzać czy jest znak przejścia do nowej linii bo on też nie pojawia się jednorazowo, nie mogę sprawdzać znaku końca pliku bo to jest strumień a nie odczytywany plik...

A przecież istnieją programy, którym wystarczy przekazać strumień, np. wygenerowany przez poprzedni program, bodajże np. tak program1.exe || program2.exe, nie wiem, może podobnie.

Więc możecie mi pomóc i wytłumaczyć jak to zrobić? Dziękuję.

1

Skorzystaj z klasy XmlWriter do pisania wszystkich węzłów po kolei, albo czytaj wszystko od użytkownika (jeśli to on ma podawać) do uzyskania jakiegoś znaku że to już koniec danych a pod koniec wczytaj to jako dokument xml (XmlDocument.Load albo jakoś tak).

Spróbuj.

0

Właśnie w tym sęk, że ja nie mam pojęcia co to za znak może być.

1

Chyba że tak: skoro to ma być "valid" dokument XML to może pobierz główny znacznik (wprowadzany na początku) i tak długo wczytuj aż user wpisze taki sam zamykający?

Tylko że takie rozwiązanie może w**** jeśli przez przypadek ktoś się pomyli.

0

Faktycznie, to rozwiązanie jest sprawne. Mam jednak pytanie co do pewnego szczegółu. Oto, jeśli uruchamiam mój szalony program z linii komend, o tak:

Moj_program "tutaj wklejam moj xml

i następuje enter, program działa. Jednak gdy zrobię coś takiego, czyli, dla mniej spostrzegawczych nie użyję cudzysłowu:

Moj_program tutaj wklejam moj xml

To linia poleceń traktuje każdy znak końca linii jak enter i program działa tak jakbym uruchomił kilka poleceń, gdzie poleceniem jest kolejna linia pliku xml. Co robię źle?

1

Hmm, ciężko stwierdzić ;)

A jak ten kod interpretujesz?

0

Wczytuję w pętli while kolejne linie, dopóki string nie będzie zawierał "</rss>".

1 użytkowników online, w tym zalogowanych: 0, gości: 1