Chodzenie po drzewie plików

0

Witam. Jestem w trakcie robienia testera XML, wygląda to tak, że jest jeden plik główny, który ma w sobie całe zapytanie bez danych, struktura user wygląda jakoś tak:

<user>
<fileName> </fileName>
<Date> </Date>
<coś>
...
</coś>
</user>

Mamy folder user a w nim 20 plików .xml, w każdym jakieś inne dane (filename, dane i struktura coś), w jednym fileName jest takie, w drugim takie, w trzecim inne i tak w 20 plikach. W pliku głównym na chwile obecną muszę podmienić tak 5 struktur. Po przeczytaniu jednego z tych 20 plików można trafić znów na odwołanie do innego pliku czyli (), wychodzą tak jakby gałęzie drzew. Możecie mi podpowiedzieć jak mogę się poruszać po tym drzewie tak aby wszystkie pliki były wykorzystane? Pootwierać wszystkie pliki to nie jest problem ale to wszystko do kupy posklejać, wysłać zapytanie i później podmieniać dane do wyczerpania plików. Mając przykładowy plik XML

<envelope>
<user>
<!-- ścieżka do plików ze strukturą user -->
</user>
<customer>
<!-- ścieżka do plików ze strukturą customer -->
</customer>
<print>
<!-- ścieżka do plików ze strukturą print -->
</print>
</envelope>

odnośnie pierwszej ścieżki mamy folder user a w nim ileś plików *.xml, teraz chciałbym wypełnić raz całe zapytanie brakującymi danymi, kolejnym razem ruszać już tylko dane od user do wyczerpania plików, pliki się wyczerpią przechodzi do customer i to samo co w user. Doszedłem tylko do jednorazowej podmiany, nie potrafię wymyślić jak to zrobić sprawnie pod pętlą. Możecie mi podsunąć jakiś pomysł? Może jakoś to inaczej zrobić? Ogólnie każda struktura ma jakieś dane w środku, te dane są umieszczone w oddzielnych plikach i trzeba je ze sobą połączyć aby wyszło prawidłowe zapytanie. Z góry wielkie dzięki i przepraszam za bełkot :P

0

Podbijam, proszę o pomoc :)

0

Chyba nie ma innego sposobu jak osobno ładować pliki i ewentualnie skleić w jedno drzewo.
Możesz do tego wykorzystać klasę XElement.

0

Dokładnie, tylko problem polega na tym jak mogę to zrobić wykorzystując wszystko co znajduje się na ścieżkach? Przypuśćmy, że mam 3 foldery jeden w drugim a razem w nich są XML, które muszę odczytać. XML z pierwszego folderu mówi mi abym poszedł do drugiego, drugi XML z drugiego folderu mówi mi abym poszedł do trzeciego, (w trzecim folderze jest 6 XML) dopiero w trzecim folderze pierwszy XML ma dobrą zawartość, którą wklejam do całego stringa, lecę dalej po całym stringu i patrze czy coś jeszcze nie wymaga podmiany (razem trzeba zastosować 4 podmiany). No i jest ok bo wszystko zostało podmienione, string w pełni zapisany ale zostało jeszcze 5 plików XML z pierwszej zamiany i pewnie też kilka z trzech ostatnich, czyli muszę odczytać z trzeciego folderu drugi XML i zamienić zawartość pierwszego XML na zawartość drugiego, znów przelecieć do końca stringa i jeżeli wszystko zostało podmienione to zapisuje stringa i lecę z pozostałymi plikami XML.

Podpowiedzieli mi aby to zrobić rekurencyjnie, na razie jestem na etapie odczytywania folderów. Rekurencyjnie odczytam foldery i pliki ale niepotrzebnie czyta mi wszystko co się tam znajduje, gdy ja chcę aby przeczytał mi tylko pliki XML w folderze woda to on mi czyta i pliki XML i wszystkie foldery i w tych folderach pliki XML. Kod wygląda tak:

        void DirSearch(string sDir)
        {
            try
            {
                foreach (string d in Directory.GetDirectories(sDir))
                {
                    string[] startXML = { string.Empty };
                    foreach (string f in Directory.GetFiles(d, "*.xml"))
                    {
                        startXML = Directory.GetFiles(sDir, "*.xml");
                        if (startXML.Length > 0) // to jest zrobione aby ze ścieżki ...\\woda   odczytał mi pliki XML
                        {
                            for (int a = 0; a < startXML.Length && !listBox1.Items.Contains(startXML[a]) ; a++)
                            {
                                listBox1.Items.Add(startXML[a]);
                            }
                        }
                        listBox1.Items.Add(f);
                    }
                    DirSearch(d);

                }

            }
            catch (System.Exception excpt)
            {
                MessageBox.Show(excpt.Message);
            }
        }

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