Autor Zpráva
sany
Profil *
Zdravím.

Nevěděl by někdo:
Jak by se dalo provést sloučení libovolného množství xml souborů (se stejným mapováním-stejnou strukturou) do jednoho?

Děkuji za radu..
juriad
Profil
Obecně to nejde (ani nemůže jít, vždy se musíš při slučování na nějaké úrovni zastavit), ale pokud popíšeš přesná pravidla a nejlépe uvedeš příklad před sloučením a po sloučení, třeba se k něčemu dobereme.

Očekáváš řešení pomocí nějakých nástrojů pro práci s xml, nebo program (vzhledem k zaměření diskuse asi v PHP)?
peta
Profil
juriad: Takhle to chapu ja...
<xml>
  <item>ahoj</item>
</xml>
+
<xml>
  <item>nazdar</item>
</xml>
=
<xml>
  <item>ahoj</item>
  <item>nazdar</item>
</xml>
juriad
Profil
peta:
co případ:
<catalog>
  <categories>
    <category name="psi"/>
    <category name="kocky"/>
  </categories>
  <products>
    <product name="bernardyn" category="psi"/>
    <product name="labrador" category="psi"/>
    <product name="devon rex" category="kocky"/>
  </products>
</catalog>
Sloučením dvou takových xmlek dostaneš duplicitní elementy categories a products: při slučováním musíš vědět, jestli máš kopírovat celý element, nebo obsah slučovat rekurzivně.


peta:
pokud by se všechny elementy měly naházet přímo do kořenového elementu, bez jakéhokoli pořadí a logiky, tak by při pěkně formátovaném xmlku stačilo:
1/ prvnímu xml odstranit poslední řádek (uzavírací tag kořenového elementu)
2/ druhému xml odstranit první řádek (otevírací tag kořenového elementu), případně dva či tři, pokud xml obsahuje prolog
3/ na tvrdku sloučit oba soubory
sany
Profil *
Věc se má tak, že normálně s xml daty pracuji v excelu (xml data import) s daty se dá pak pohodlně pracovat. Momentálně jsem ale jako vstup dostal asi 1000 souboru a v každém je několik záznamů. Musím z nich udělat jeden soubor a pak data setřídit, upravit apod.
Při takovém množství souborů, to ale exel nějak nechce sežrat a nechce se mi procházet jeden po druhém..
Joker
Profil
juriad:
Další možnost by byla vyrobit nějaký nový kořenový element a do něj postupně sypat kořenové elementy z těch XML souborů (včetně obsahu, samozřejmě) a na konci ho zase uzavřít.
peta
Profil
Tak to nasyp do databaze. Mysql, treba. SQL prikazy mas podobne jako zpracovani excelem. Pripadne si muzes udelat pak export na xml nebo csv pro excel.
juriad: Chapu. Mohlo by to byt zajimave resit. Slouceni xml zpusobem, jaky popisujes, muze delat problemy pri importu. Z duplicitnich tagu vyrobi pole categories[0] = ['psi', 'kocky'], categories[1] = ['krecci'].
sany
Profil *
peta:
Doufal jsem, že někdo bude mít tip na nějaký nástroj a vyhnu se psaní skriptu..
ts_istudio
Profil
sany:
Už to, co vidíš napsáno výše, vyplývá, že nějaký plně automatický nástroj najdeš těžko, protože nejspíš neexistuje.
Když ukážeš strukturu těch souborů, dostaneš konkrétnější radu.
Joker
Profil
Teoreticky by byla úplně primitivní cesta:

1. Spojit všechny soubory do jednoho (to jde udělat i z operačního systému, minimálně přes příkazovou řádku, příklad).
2. Otevřít výsledek třeba v PSPadu, nebo podobném editoru
3. Pomocí regulárních výrazů odstranit „<\?xml [^>]+\?>“ (v PSPadu: Hledat, Nahradit, Najít: to co je uvnitř uvozovek, Nahradit: nechat prázdné a zaškrtnout „Regulární výrazy“).
4. Na začátek souboru dopsat nějaký tag a na konci souboru ho ukončit a v případě potřeby (není-li kódování UTF-8) na první řádek dopsat XML prolog.

Tím by mělo vzniknout platné XML.
Jestli v použitelném tvaru, to je otázka.
ts_istudio
Profil
Joker:
1. Spojit všechny soubory do jednoho (to jde udělat i z operačního systému, minimálně přes příkazovou řádku, příklad).

Mělo by fungovat i prosté copy *.xml vystup.xml

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: