Różne struktury XML - jak je rozróżnić?

0

Cześć,
zanim zrobię coś głupiego wolę się zapytać. Mam kilka typów plików XML tzn. jeden dokument reprezentuje np. fakturę sprzedaży a inny dokument raportu kasowego. Są to dwa zupełnie różne dokumenty - mają inną strukturę XML (chociaż część elementów jest podobna/wspólna).
Użytkownik wybiera jeden dokument, który ma zostać odczytany przez aplikację.
A moje pytanie brzmi jak w prosty sposób rozróżnić który plik wybrał użytkownik (czy była to faktura sprzedaży czy dokument raportu kasowego ew. inny?
Czy mogę prosić o jakiś przykład w LINQ to XML?
Z góry bardzo dziękuję za pomoc.

4

Szklane kule wyszły z mody, nikt nie da Ci kodu bez struktury dokumentu. Nie rozpoznasz pliku, jeżeli nie masz informacji w stylu „faktura sprzedaży ma zawsze atrybut X tu i tu, a dokument raportu kasowego tego nie ma”. Jak nie masz takiej wiedzy, to możesz zgadywać (albo zająć się uczeniem maszynowym i zgadywać trafniej).

A najprościej, to poprosić użytkownika, żeby przy dodawaniu pliku sprecyzował, co to za potworek.

1

Nie wiem kto generuje tego XML, ale jeszcze mam sugestię, że może identyfikować się po nazwie (np konkretny przedrostek), albo kuluralniej przedstawić się za pomocą schematu, co jeszcze pozwoli utrzymać kontrolę nad samym porzadkim w plikach i strukturze, a deklaruje się go w pierwszej linijce pliku

1

Skoro użytkownik wybiera dokument, a nie jest to jakiś bulk-insert z jakiegoś zip'a. To może po prostu niech ten użytkownik zaznaczy jaki typ dokumentu wgrywa :P tak jak pisał kolega wyżej.

Chyba (nietestowane) można też zdeserializować xml do ExpandoObject i potem refleksja sprawdzic czy ma wszystkie pola jakie potrzebujesz (nie wiem czy zadziała, średnio mi się widzi takie rozwiązanie i raczej skłaniał bym się ku temu wyżej jeśli jest taka możliwość).

1

Jeśli znasz strukturę plików, możesz zdefinować sobie XSD do walidacji: https://docs.microsoft.com/en-us/dotnet/standard/data/xml/xml-schema-xsd-validation-with-xmlschemaset
Lub dowiedz się u źródła - może mają takie pliki.

0

Dziękuję wszystkim za udział w dyskusji. Ogólnie na szczęście problem udało się rozwiązać - jeden z atrybutów faktycznie informuje jakiego typu jest plik. Ogólnie to pliki są bardzo nieczytelne z uwagi na liczbę atrybutów. Struktura jednak okazuje się dość prosta.
Przy okazji wyszło kilka dodatkowych komplikacji, ale udało mi się je rozwiązać :-).
Dziękuję.

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