Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Szukanie gałęzi w xml

7 views
Skip to first unread message

Adam

unread,
Jun 7, 2021, 7:14:41 AM6/7/21
to
Witajcie.

Jest sobie stado plików XML w których potrzebuję znaleźć wszystkie gałęzie,
jakie wystąpiły, ale od określonego miejsca.

Konkretnie:
Są to faktury.

Ich struktura wygląda mniej-więcej tak:

/nagłówek
/nagłówek/data wystawienia
/nagłówek/data sprzedaży
/nagłówek/kontrahent_NIP
(...)
/elementy/pozycja
/elementy/pozycja/pozycja_nr
/elementy/pozycja/EAN
/elementy/pozycja/ilosc
/elementy/pozycja/cena
/elementy/pozycja/informacje_dodatkowe
/elementy/pozycja/informacje_dodatkowe/numer_partii
/elementy/pozycja/informacje_dodatkowe/numer_swiadectwa
/elementy/pozycja/informacje_dodatkowe/gatunek


Teraz tak:
w jednej pozycji występuje przykładowo:

/elementy/pozycja/informacje_dodatkowe/numer_partii
/elementy/pozycja/informacje_dodatkowe/termin
/elementy/pozycja/informacje_dodatkowe/gatunek

a w innej pozycji:

/elementy/pozycja/informacje_dodatkowe/numer_swiadectwa
/elementy/pozycja/informacje_dodatkowe/odmiana


Chciałbym uzyskać listę wszytskich możliwych gałęzi poniżej
/elementy/pozycja/informacje_dodatkowe/

Da się to w jakimś edytorze lub programie pozbierać do kupy?
Wiersze mogą się powtarzać, z mojego punktu widzenia ważne jest, aby czegoś
nie przegapić.


--
Pozdrawiam.

Adam

Tomek

unread,
Jun 7, 2021, 9:10:34 AM6/7/21
to
W dniu 07.06.2021 o 13:14, Adam pisze:
> Witajcie.
>
> Jest sobie stado plików XML w których potrzebuję znaleźć wszystkie gałęzie,
> jakie wystąpiły, ale od określonego miejsca.
>
[...]
> Da się to w jakimś edytorze lub programie pozbierać do kupy?
> Wiersze mogą się powtarzać, z mojego punktu widzenia ważne jest, aby czegoś
> nie przegapić.
>
>

Teoretycznie do przetwarzania XMli służy XSLT.

Choć ja jakbym miał to robić to użyłbym PHP (bo znam) +
simplexml_load_file()

Adam

unread,
Jun 7, 2021, 9:42:30 AM6/7/21
to
XSLT (ani XML-ami) nie zajmowałem się.
Wiem, że to można zrobić jakimś parserem. Ale to trochę za wysokie progi
jak dla mnie.

Docelowo do programu muszę dopisać atrybuty, ewentualnie coś jeszcze
skrobnąć w SQL.
Rozgryzanie PHP zostawię na później, jeśli nie znajdę innej możliwości.


--
Pozdrawiam.

Adam

artiun

unread,
Jun 9, 2021, 5:11:10 AM6/9/21
to
W dniu 2021-06-07 o 13:14, Adam pisze:
Czyli ma zostać?

> numer_partii
> numer_swiadectwa
> gatunek
> numer_swiadectwa
> odmiana

Da się to zrobić edytorem (replace/zamiana). Duplikaty wyciąć także
edytorem. Wycięcie śmieci także edytorem (regexp). Choć pareserem jest
łatwiej, uniwersalniej i szybciej.

Adam

unread,
Jun 9, 2021, 5:31:11 AM6/9/21
to
Tak.
Może zostać w ten sposów, może być w drzewku, czyli np.
/elementy/pozycja/informacje_dodatkowe/odmiana
To i tak będzie ręcznie wpisywane jako atrybuty do programu.

>
> Da się to zrobić edytorem (replace/zamiana). Duplikaty wyciąć także
> edytorem. Wycięcie śmieci także edytorem (regexp). Choć pareserem jest
> łatwiej, uniwersalniej i szybciej.

Czyli na dobrą sprawę wystarczyłby edytor typu tekstowego, w którym dało by
się zrobić warunek negatywny w rodzaju:

jeżeli <> "/elementy/pozycja/informacje_dodatkowe/" to usuń

Jakaś podpowiedź względem edytora albo tak skonstruowanego warunku?


--
Pozdrawiam.

Adam

artiun

unread,
Jun 10, 2021, 4:57:06 PM6/10/21
to
>
> Czyli na dobrą sprawę wystarczyłby edytor typu tekstowego, w którym dało by
> się zrobić warunek negatywny w rodzaju:
>
> jeżeli <> "/elementy/pozycja/informacje_dodatkowe/" to usuń
>
> Jakaś podpowiedź względem edytora albo tak skonstruowanego warunku?
>
Czyli problemu nie ma. Z tym, że tu jest odwrotnie. Ja np. używam EmEdytor,
pozwala na otwieranie dużych plików. W opcjach Edit/Separated value/Sort ma
możliwość sortowania zawartości pliku. Po tym można ręcznie wyciąć to co nie
pasuje do /elementy/pozycja/informacje_dodatkowe/ wtedy ta sekwencja
zostanie w jednym bloku. Jednak jak napisałem napisanie sobie parsera
(przykładowo w PHP nie zajmie wiele) staje się uniwersalne i powtarzalne.

artiun

unread,
Jun 10, 2021, 5:07:28 PM6/10/21
to
Notepad++ (free)
też ma sortowanie: "Edit/Line operations/Sort lines..."

Ronald Kuczek

unread,
Jun 15, 2021, 4:29:42 PM6/15/21
to
Skorzystaj z silnika bazodanowego. Wrzuć te pliki np. do PostgreSQL a później:
https://www.postgresql.org/docs/9.1/functions-xml.html
Prostymi selectami wyciągniesz sobie co tylko zechcesz.
Pozdrawiam
Rony

Ronald Kuczek

unread,
Jun 15, 2021, 4:38:09 PM6/15/21
to
Sorry za starszy link patrz:
https://www.postgresql.org/docs/12/functions-xml.html#FUNCTIONS-XML-PROCESSING
Hint: xmldata
Pozdrawiam
Rony
0 new messages