Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 1. 8. 2016 14:28:03

peekaa
Člen
Registrace: 10. 6. 2010
Příspěvků: 111

xslt zbozi.cz

Potřeboval bych udělat export z tabulky do xml pomocí xslt pro zbozi.cz, http://napoveda.seznam.cz/cz/zbozi/spec … xml-feedu/. Nějak se v tom motám, všude píší, že to není nic složitého, ale nemohu najít žádný srozumitelný návod, jak na to. Poradí někdo? Díky moc.

Offline

#2 1. 8. 2016 18:13:26

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,698

Re: xslt zbozi.cz

Tohle potřebuje šablonu. Všechny texty musí být vloženy mezi tagy. Navíc je potřeba to přejet UTF-8. To jsou poměrně často běžné znaky stžejné jako když píšete V Calcu ap. Odlišuje se jen několik znaků.
     Některé pasáže vystačí s obyčejným (plain textem) tedy bez konverze. V tom návodu je to napsané kde to může být a kde ne. To co je v Calcu a Writeru - v podstatě jako ACSII 8bit je vlastně ANSI. Zde najdeme například pod znaky s háčky číslo CODE() < 255. Když ale zadáte dotaz UNICODE() na stejný znak vyskočí číslo větší.
     

     Takže primitivní konvertor vytvoříte tak, že zjistíte všechny znaky abecedy jako CODE() a pak totéž jako UNICODE(). Tam kde je Unicode větší nežli 255 musí příjít náhrada (nejlépe přehozením UNICHAR za CHAR).
     Znaky do čísla 127 jsou u většiny západoevropských znakových sad stejné - tedy bez české interpunkce. Zato znaky 128 - 255 se rekrutují z vyšších čísel. Ale mezi ANSI a UTF-8 (oboje české) je asi jenom necelá desítka rozdílů. Dá se to nahradit textovými funkcemi (Search, Find, SUBSTITUTION, Replace ap.)


     Snadnější je asi vyhledat tabulku znaků pro UTF-8 (Pozor nesmí to být jinak - ani utf-8, ani UTF8 ap.) Odsouhlasit si svou abecedu a shodné znaky smazat. Tím dostanete jen takové, které se musí nahradit. Pak dáte vyhledat a nahradit (dialogem, vzorcem, makrem, růčo..:-). Na to je nejlepší makro. Nejsem si jistý ale něco podobného řešil ing Pastierik ve svém rozšíření. Nevím jestli to bylo jen pro Writer, ale i to by stačilo - z Calcu do Writer.
     Podobně lze text uložit jako csv a znovu otevřít ve formátu UTF-8 který nabízí naše konverzní filtry. Takže nějakou cestou - a jsou jistě i jednoduché programy jako PsPad a jiné - svůj text převeďte na UTF-8.


     Nyní zbývá udělat šablonu kde budou vypsané tagy (takové ty podivnosti Levý tag = <....>text UTF-8</....> = pravý tag. Například do sloupce A dáte jen levé tagy, ve sloupci B vlastní text a ve sloupci C pravé tagy. Takže to co spolu souvisí dáte do stejného řádku. Tam kde má být mezera (odřádkování) necháte prázdný řádek. Nyní to sloučíte například pomocí CONCATENATE(), nebo pomocí "&" do jiného listu.
     Pak to vypadá po sloučení například jako odkazy
<levýTag>text1 který se bude konvertovat na UTF-8</PravýTag>, další řádek opět
<levýTag>text2 který se bude konvertovat na UTF-8</PravýTag>, dále například vynechaný řádek
....
<levýTag>text3 který se bude konvertovat na UTF-8</PravýTag>, a tak dál.
     List se sloučenými tagy a textem uložíte jako .csv někam kde ho najdete. Po novém otevření filtrem UTF-8 to uložíte znovu, ale nejlépe jako .XML (Něco určitě doporučují ale nevšiml jsem si). Doplníte už jenom texty které nemají být v UTF-8. a uložíte si to pro test.
     Jak mají jít tagy a obsahy za sebou je popsáno důkladně. Je tam i odkaz na validátor. Takže výstup ze šablony odešlete do validátoru a uvidíte co je správně a co je chyba (alespoň myslím že identifikoují chyby a oznámí jaké a kde jsou - na pozici, nebo větě ap.). Zažil jsem validátor který vrátil jen poznámku "neodpovídá specifikaci" a nebo něco ještě dost podobného a vágního. Ale to je pro odborníky a je to nevstřícná obstrukce.


     Při ukládání do csv si dejte pozor na to, že se ukládá jen aktuální list - ten byste měl pojmenovat podle potřeby, protože takto bude také uložen (tedy název listu Calcu se stene názvem dokumentu .csv).
     Ale při tom se celý sešit přejmenuje na koncovkou .csv. Otestujte si to nejdříve s pár řádky a sešit zavřete. Pokud byl dříve uložen pod názvem jako .odt tak bude tam kde byl - zavřený pod původním názvem. Když otevřete uložené .csv tak můžete klidně Writerem, nebo Calcem. Nabídne se exportní filtr který musíte převolit na UTF-8.
     Ale v případě opakované práce (více .csv souborů doporučuji :
Nejprve uložit vyplněný sešit jako .odt
Následně hned uložit list jako .csv
Hned poté ho uložit jako .odt a pokračovat jiným dokumentem (tedy bez zavírání šablony).
- Po otevření .csv uložit jako .xml pokud to vyžadují takto - ale může to být i jinak.
- Doplnit, přepsat text bez formátu.
- Uložit pro otestování (tak aby to bylo ve snadno přístupném folderu - na ploše, C./, Dokumenty, a podobně)


      Když budete mít i pozitivní výsledky z validátoru - je zřejmé že máte vše dobře - uložte sešit s tagy (ale bez vyplněných obsahů) jako šablonu. Nejlépe je podívat se do nápovědy jak se to dělá - je to docela snadné. Pak už vždy jen otevřete šablonu, vyplníte kolonky a uložíte .csv (nebo přímo XML). Když máte šablonu až nemusíte dávat pozor na zpětné uložení do .odt. Nežli zavřete .csv, klepněte na šablonu která vydá nový mustr. Pak teprve zavřete původní .csv. To je kvůli tomu, aby se Vám nepovedlo zavřít celé LO (AOO). Tím by došlo k novému načítání a to by Vás určitě prudilo. Stačí jen uložit původní, otevřít šablonu a zavřít původní.


     Samozřejmě šablona by měla v základním listu pro Vaši orientaci obsahovat názvy kolonek a poznámky co je povinné a co nikoliv.... Také je dobré otestovat zda tam kde má být prostý text může být také UTF-8 abyste nemusel znovu otevírat soubor připravený k odeslání. Pokud to nebude možné, musíte UTF-8 opravit na "češtinu", nebo také dodatečně vložit celý text bez formátu.


     Šlo by udělat makro které by vše udělalo tak, že vložite jen text a po stisku se vše udělá samo (tak jak jste asi původně doufal). To by ale musel někdo udělat. Pár takových lidí tu je. Ale nevím. Určitě se jedná o hodně česu při testování a úpravách. Při tom to lze zvládnout jen jednoduchými vzorci a opravovat co nespolkne validátor až se dopracujete k vytvoření vlastní šablony.


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 1. 8. 2016 21:03:03

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 523

Re: xslt zbozi.cz

ještě bych doplnil že pokud to budete dělat metodou výše popsanou, tak se neobejdete bez maker - je potřeba nacyklit každý řádek položek tedy každou ucelenou položku <SHOPITEM></SHOPITEM> do "samostatné" sekce xml dokumentu. To v podstatě vzorci takřka nelze (nebo jen velice vachrlatě). Pokud makra neumíte, ale nachystáte si šablonu napříkald podle vzoru zde:
https://dl.dropboxusercontent.com/u/146 … zemsky.ods
(akorát zdrojová tabulka by měla odpovídat té vaší - tedy předpokládám hodnoty v řádku nikoli ve sloupci jak to mám já)
tak vám to makro já nebo někdo z fóra napíše, to už je celkem jednoduché. Samozřejmě i export pomocí makra je o dost pohodlnější - ukládá se přímo xml jako samostatný soubor a původní soubor se nehne.


LibreOffice 5.2.2.2

Offline

#4 1. 8. 2016 21:53:25

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 791

Re: xslt zbozi.cz

Moc informací jste nenapsal.

a) V Calcu to jde.
Pokud je to jednorázová akce, stačí vzorečky (funkce INDEX při tom pomůže).

b) Pokud výstup má být vystaven/posílán někde na webu, zkusil bych jiné nástroje.
- přímou konverzi souboru do xml
- konverzi csv -> xml
. použití šablony
. php
. python
. perl

....


Je toho docela dost.

Offline

#5 2. 8. 2016 06:50:29

peekaa
Člen
Registrace: 10. 6. 2010
Příspěvků: 111

Re: xslt zbozi.cz

Četl jsem tohle https://forum.openoffice.org/en/forum/v … slt+filter a připadlo mi, že to bude tak nějak jednoduché, i když mi ty xslt vzory připadají stejně šílené. Ale jak čtu vaše připomínky, tak to asi jednoduše nejde.... Díky všem. Asi to nechám být.

Offline

#6 2. 8. 2016 07:27:36

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 523

Re: xslt zbozi.cz

Myslím že zápis toho exportního filtru je o něco složitější než to udělat pomocí vzorců, ale možná je to jen tím že to neumím :-)


LibreOffice 5.2.2.2

Offline

#7 2. 8. 2016 16:25:17

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,698

Re: xslt zbozi.cz

Šablona plně postačuje a když si ji uživatel postaví sám tak o to lépe. Problém je s tím, že různé produkty jako zboží vyžadují jiné kolonky a někdy jsou některé poviné - jindy jsou jen nepovinné. Záleží na uživateli které v mustru ponechá. Obecně může udělat šablonu na všechny případy ale to se mu určitě vymstí v pracnosti.

     Zase když udělá přesně specializované - například "mobilní telefony", MP3 přehrávače, a podobně bude jich potřebovat postavit hodně. Pak teprve uvažovat o postupu konverze na XML - to je asi ten nejmenší problém vzhledem k možnostem. Stejně výstup musí projít testy. Osobně bych stavěl případné makro až po otestování manuálně udělaných šablon. Nejméně se jedná o větvení možností podle dialogu.
     Viděl jsem, že například eshopy mají formulář pro nabídky. Šablona by měla být jakousi obdobou, ale mohla by být přímo formulářem (dokument s XML formulářem). Šablona se chová téměř stejně, jen se převod na XML udělá dodatečně + úpravy na plain text. Ale například ilustrační fota jsou shodným postupem ap.
     Pak už asi nebude potřeba nic jiného nežli úvodního kontrolního testu makra. Makro v běžném provozu načte text - vyplivne xml a hned ho může poslat na server - vše v jednom proudu.

Editoval neutr (2. 8. 2016 16:34:16)


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#8 2. 8. 2016 21:11:54

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 791

Re: xslt zbozi.cz

xslt je fakticky programovací jazyk.

Při exportu máte (předpokládám) pevnou strukturu tabulky a použití tohoto jazyka nemusí být podstatnou výhodou. Je tedy jedno, v jakém jazyce to uděláte. Fakticky to jsou vypsání úvodní sekvence, 2 cykly přes řádky a sloupce tabulky, kde se spojují jednoduché řetězce a zakončení.

Ale, jak jsem se už zmínil, můžete to napsat prakticky v čemkoliv, co máte v systému, tj. nemusí to být nutně makro v calcu.

Offline

Zápatí