abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

dnes 16:22 | Nová verze

Byla vydána verze 0.11.0 softwaru pro statistickou analýzu dat GNU PSPP (Wikipedie), svobodné alternativy k proprietárnímu softwaru IBM SPSS Statistics (Wikipedie). Vedle několika vylepšení a oprav chyb jsou řešeny také 2 bezpečnostní chyby CVE-2017-10791 a CVE-2017-10792. O týden později byla vydána verze 1.0.0 přinášející pouze aktualizaci překladů. Proč verze 1.0.0 a ne například 0.11.1? Dle vývojářů jsou důvody následující:

… více »
Ladislav Hagara | Komentářů: 0
dnes 10:35 | Komunita

Na blogu Oracle se objevila zpráva o tom, že plánovaná verze Java EE 8 bude uvolněna jako open source (referenční implementace a compatibility kit). V současné době je uvolněna jen Java SE (standard edition) pod licencí GPLv2 v podobě OpenJDK (Open Java Development Kit), kterou začal v roce 2006 uvolňovat Sun.

Max | Komentářů: 3
včera 23:55 | IT novinky

Google na YouTube oficiálně představil Android 8.0 Oreo. Přehled novinek v příspěvku na blogu věnovaném vývojářům.

Ladislav Hagara | Komentářů: 21
včera 16:44 | Zajímavý článek

Po téměř 3 měsících od vydání třetího čísla publikoval Michal Špaček na svých stránkách čtvrté číslo newsletteru věnovanému bezpečnosti, bezpečnému vývoji převážně webových aplikací a bezpečnosti uživatelů. Jedná se současně o číslo poslední: "Nepíše se mi to lehce, a trvalo to, než jsem to ze sebe dostal, ale tohle je poslední newsletter v této podobě. Ani jsem ho nestihl pojmenovat a už jsem ho zabil. Nezbývá mi tolik času, abych každou událost, novinku a změnu v prohlížeči detailně popisoval tak, jak bych v newsletteru chtěl, mrzí mě to".

Ladislav Hagara | Komentářů: 2
včera 07:00 | Nová verze

Byla vydána diaspora* ve verzi 0.7.0.0. Jedná se o svobodný software, který slouží jako osobní webový server pro poskytování služeb sociální sítě (Wikipedie). Přehled novinek v příspěvku na blogu a na GitHubu. Sociální síť diaspora* byla před pěti lety předána komunitě.

Ladislav Hagara | Komentářů: 0
včera 06:00 | IT novinky

Společnost Hardkernel stojící za jednodeskovými počítači ODROID představila na YouTube minipočítač určený pro domácí cloud ODROID-HC1 vycházející z ODROID-XU4. Minipočítač s kovovou krabičkou, do které stačí vložit 2 a půl palcový disk, lze koupit za 49 dolarů. ODROID-HC1 je stohovatelný.

Ladislav Hagara | Komentářů: 38
20.8. 16:22 | Nová verze

Byl vydán DB Browser for SQLite (sqlitebrowser) ve verzi 3.10.0. Nejnovější stabilní verze této grafické nadstavby nad relačním databázovým systémem SQLite (Wikipedie) přináší například integraci s DBHub.io, tj. platformou pro sdílení SQLite databází. Podrobnosti na GitHubu.

Ladislav Hagara | Komentářů: 2
20.8. 08:00 | IT novinky

Andy Rubin, spoluzakladatel společnosti Android, jež byla v roce 2005 koupena Googlem, nyní CEO společnosti Essential Products, oznámil předprodej chytrého telefonu Essential. Telefon se začne rozesílat 1. září. Cena telefonu je 699 dolarů. Cena telefonu současně s 360° kamerou s rozlišením 4K byla stanovena na 749 dolarů. Kameru, v budoucnu i další příslušenství, lze k telefonu připojit pomocí konektoru s magnety.

Ladislav Hagara | Komentářů: 0
19.8. 13:44 | Zajímavý software

Evropská komise vydala novou verzi 1.4.0.1 svého open source v Javě naprogramovaného softwaru pro online průzkumy EUSurvey. Online dotazníky lze vytvářet na stránkách Evropské komise nebo si lze software stáhnout (zip a war) a nainstalovat lokálně. Zdrojové kódy jsou k dispozici pod licencí EUPL (European Union Public Licence).

Ladislav Hagara | Komentářů: 0
18.8. 23:55 | Komunita

Ubuntu 17.10 (Artful Aardvark) bude ve výchozím stavu zobrazovat Dok (Launcher). Jedná se o rozšíření GNOME Shellu Ubuntu Dock. To bylo forknuto z rozšíření Dash to Dock. Ukázka na YouTube [reddit].

Ladislav Hagara | Komentářů: 8
Těžíte nějakou kryptoměnu?
 (5%)
 (2%)
 (18%)
 (76%)
Celkem 374 hlasů
 Komentářů: 21, poslední 13.8. 09:57
    Rozcestník

    Dotaz: Jak vypreparovat data z HTML tabulky do CSV?

    1.11.2007 22:07 David Jaša | skóre: 44 | blog: Dejvův blog
    Jak vypreparovat data z HTML tabulky do CSV?
    Přečteno: 1343×
    Stojím teď před problémem: potřebuju z HTML stránky dostat některá data. HTML je celé na jednom řádku a podstatná část z DOM stromu vypadá zhruba takto:
    tr
    -td
    -td
    -td
    tr
    -td
    -td
    -td
    --input
    --@onclick
    Přičemž těch řádků je hodně a některé (jako ten první) nenesou žádnou informaci. Ty podstatné řádky mají v poslední buňce input a potřeboval bych znát hodnotu textu v prvních dvou buňkách a parametr onclick elementu input v poslední buňce. Jak na to jít? Napadly mě dvě cesty jak toho dosáhnout:

    - sed: vymyslet regulární výraz, který z HTML vytáhne zajímavé HTML řádky (každý na jeden plaintext řádek) a pak pomocí prostého s/regexp/\1;\2;\3/ z těchto řádků vytáhnout řetězce a poskládat je. Vůbec ale netuším, vytáhnout ty podstatné HTML řádky

    - xsltproc --html: Zkusil jsem si vytvořit xsl styl, který tyto informace vytáhne. Nedaří se mi ale vytvořit šablonu tak, abych dostal obsah pouze ze mnou žádaných uzlů, buď se nevypíše nic nebo se vypíše obsah všech textových uzlů.

    Díky za jakoukoliv pomoc.

    Odpovědi

    Josef Kufner avatar 1.11.2007 22:15 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Pokud máš řádek v tabulce umístěný na jendom řádku v souboru, tak by nemělo být problém nahradit </td><td> za čárky a máš víceméně hotovo.

    Další možností by mohlo být použít lynx nebo links, nechat si to vyrenderovat do plain textu a z něj to nějak vyříznout. Hodně ale záleží na povaze dat.

    Případně můžeš zkusit ctrl+c, ctrl+v z mozilly do oo calcu ;-)
    Hello world ! Segmentation fault (core dumped)
    1.11.2007 22:53 David Jaša | skóre: 44 | blog: Dejvův blog
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Problém je, že na jednom řádku je celá tabulka zapouzdřená ještě v tabulce, co tvoří layout. Jakmile z toho dostanu jeden HTML řádek na jeden plaintext řádek, tak jsem za vodou. Links, lynx, mozilla ani jiný běžný browser pak neřeší úkol vydolovat hodnotu parametru onclick elementu input... Vlastní data jsou všechno alfanumerické znaky (i s diakritikou nejspíš ve windows 1250).
    1.11.2007 23:04 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Jakmile z toho dostanu jeden HTML řádek na jeden plaintext řádek, tak jsem za vodou

    A co třeba:

    sed 's#</tr>#</tr>\n#' | sed -n '/<tr>/p' | \
      sed 's#<tr><td>\([^<]*\)</td>...<input onclick="\([^"]*\)">...#\1 ..#'
    I am always ready to learn although I do not always like to be taught. (W. Churchill)
    1.11.2007 23:12 David Jaša | skóre: 44 | blog: Dejvův blog
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Tento sed nezvládá vloženou tabulku - začne otevírací značkou <tr> tabulky, co dělá layout, skončí na uzavírací značce prvního řádku vnitřní tabulky a další řádky už nevypíše...
    1.11.2007 23:33 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?

    's#</tr>#</tr>\n#' => 's#</tr>#</tr>\n#g'

    PS: je to jenom nástřel, možná je to úplně špatně (a nakonec bude to XSLT nejlepším řešením)

    I am always ready to learn although I do not always like to be taught. (W. Churchill)
    1.11.2007 23:40 David Jaša | skóre: 44 | blog: Dejvův blog
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Stále nic. Ráno sem postnu svou snahu o XSLT. :-)
    1.11.2007 23:48 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    XSLT je asi ideální nástroj, ale jen za předpokladu, že je to HTML napsané tak slušně, aby ho bylo možné (možná po malé úpravě) považovat za XML.
    2.11.2007 09:54 David Jaša | skóre: 44 | blog: Dejvův blog
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    xsltproc(1):

    --html The input document is an HTML file.
    2.11.2007 21:55 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    To nemusí stačit. Nemalá část toho, co servery prohlašují za text/html, ve skutečnosti není HTML.
    zoul avatar 2.11.2007 07:38 zoul | skóre: 43 | blog: | Boskovice
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    XSLT by (alespoň na mě osobně) bylo overkill, regulární výraz v Perlu to spolehlivě vyřeší. Nechceš sem místo XSLT řešení poslat ukázkovou tabulku a výstup, který bys z ní chtěl dostat? Jinak budeme do haleluja upřesňovat zadání.
    1.11.2007 22:35 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?

    Ještě je tady alternativa někde na pomezí - pokud umíte v AWK, tak bude možná nejrychlejší použít xgawk, což AWK upravený pro zpracování XML (místo řádkových vzorů se používá vzor pro počáteční elementy atp.) - více v dokumentaci.

    I am always ready to learn although I do not always like to be taught. (W. Churchill)
    1.11.2007 22:54 David Jaša | skóre: 44 | blog: Dejvův blog
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    V awk neumím, k podobným hrátkám v shellu se dostanu tak jednou za rok...
    2.11.2007 08:34 Aleš Kapica | skóre: 46 | blog: kenyho_stesky | Ostrava
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Přesně tak, awk není zase tak složitý a je to mocný nástroj. Ve spojení s nějakou řádkovou utilitou co zobrazí to html jako plain text z toho v pohodě data kuchnete.

    Ovšem návrh co se objevil hned v počátku - zkopírovat data do tabulky v OpenOffice také není úplně špatný, hodněkrát jsem si tak pomohl. A řešení s XSLT? Výborné, ovšem také má své ale.
    2.11.2007 09:50 David Jaša | skóre: 44 | blog: Dejvův blog
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Jasně, ale jak při převedení na plaintext libovolným browserem získám ta data z parametru INPUTu? Jakmile to budu mít v plaintextu, tak to zvládnu sedem, jak už jsem psal...
    2.11.2007 10:29 Aleš Kapica | skóre: 46 | blog: kenyho_stesky | Ostrava
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Musel bych to vidět..
    2.11.2007 10:51 David Jaša | skóre: 44 | blog: Dejvův blog
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Jak zhruba vypadá to html (špičaté závorky pro rychlost nahrazeny hranatými):
    [html]
    [head]
      [title]titulek[/title]
      [script language="javascript"]
        skript, ktery obsahuje ruzne [elementy /] a mate tim xsltproc
      [/script]
    [head]
    [body]
    [table] [!-- layout --]
    [tbody]
    [tr]
    [td]
    [div]
    [table]
    [script language="javascript"]dalsi skript[/script]
    [tbody]
    [tr]
      [td]nadpis sloupce 1[/td]
      [td]nadpis sloupce 2[/td]
      [td]nadpis sloupce 3[/td]
      [td]nadpis sloupce 4[/td]
      [td][/td]
    [/tr]
    [tr]
      [td]text11[/td]
      [td]text12[/td]
      [td]text13[/td]
      [td]text14[/td]
      [td][input onclick="akce1"][/td]
    [/tr]
    [tr]
      [td]text21[/td]
      [td]text22[/td]
      [td]text23[/td]
      [td]text24[/td]
      [td][input onclick="akce2"][/td]
    [/tr][/tbody][/table][/div][/td][/tr][/tbody][/table][/body]
    přičemž celé <body> je na jednom řádku a potřebuji z toho dostat takovéto .csv:
    text11;text12;akce1
    text21;text22;akce2
    2.11.2007 11:08 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?

    Nejdřív bych naházel každý tag na jeden řádek (teda ukončit řádku za uzavíracím):

    sed 's#</[^>]*>#&\n#g'

    Tohle by mohlo dát všechny [tr] do jednoho řádku a vytisknout je:

    sed -n '/<tr>/{:a;s#</tr>#&#;t k;N;s#\n##;b a;:k;p}'

    Možná to nebude fungovat úplně přesně, ale myšlenka (použít N a podmíněný skok t) je snad správná.

    Pak by mělo stačit prohnat to grepem a sedem přetransformovat...

    I am always ready to learn although I do not always like to be taught. (W. Churchill)
    2.11.2007 11:30 Aleš Kapica | skóre: 46 | blog: kenyho_stesky | Ostrava
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Je to jen naznačení postupu..
    user@stroj:~$ w3m tabulky.htm | awk '{...}'
    
    Taky mi z toho není jasné, jestli se v tom inputu objevují nějaké hodnoty generované javascriptem atp. To s ukázkou kódu nasimuluji stěží..
    Josef Kufner avatar 2.11.2007 23:31 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Na tohle se hodí awk. Vždy pri [/tr] vypíšeš nakešované řádky od minulého [tr] na jeden řádek. Tím sladíš logické a fyzické řádky. Nakonec bych to předhodil sedu, ať vyhází zbytečnosti... něco jako:
    awk '
       $0 ~ "[tr]" { ln = 0; }
       $0 ~ "[td]" { line[ln++] = $0; }
       $0 ~ "[/tr]" { print line[0] line[1] line[2] line[3] line[4]; }
    ' < file.html | sed 's/.../\1 \2 \3 \4 \5/'
    
    Ten sed už zvládneš určitě sám... ;-)
    Hello world ! Segmentation fault (core dumped)
    3.11.2007 14:08 David Jaša | skóre: 44 | blog: Dejvův blog
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Celé <body> je na jednom fyzickém řádku...
    zoul avatar 3.11.2007 11:35 zoul | skóre: 43 | blog: | Boskovice
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Tak nabízím tohle:
    #!/usr/bin/env perl
    
    use strict;
    use warnings;
    undef $/;
    $_ = <>;
    
    my @ctx = m{
    	<tr>\s*					# Úvodní TR
    	<td>([^<]*)</td>\s*			# První buňka
    	<td>([^<]*)</td>\s*			# Druhá buňka
    	(?:<td>[^<]*</td>\s*)*			# Zbývající buňky
    	<td><input\s*onclick="(.*?)">		# INPUT, od kterého se odpíchneme
    	(?{print "$1;$2;$3\n"})			# Vypsat výstup
    }gsx;
    
    Na zadané ukázce frčí dobře:
    zoul@naima:~$ ./tabulky.pl < vstup.html 
    text11;text12;akce1
    text21;text22;akce2
    zoul@naima:~$ 
    
    3.11.2007 11:48 moira | skóre: 30 | blog: nesmysly
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Predbehl jsi me :) Perl je proste na nektere veci k nezaplaceni.
    Překladač ti nikdy neřekne: "budeme kamarádi"
    3.11.2007 14:12 David Jaša | skóre: 44 | blog: Dejvův blog
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Na vzorovém html to funguje perfektně, ale pro reálné, které má v některých <tr> parametr bgcolor s různými hodnotami a v některých <td> je zarovnání, se mi to nedaří upravit. Jdu na to správně tímto způsobem:
    <tr[^>]*>([^<]*)</td>\s*                # První buňka
    ?
    zoul avatar 3.11.2007 19:31 zoul | skóre: 43 | blog: | Boskovice
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Jo, jdeš na to dobře, akorát tam máš chybu (překřížený tag). Tohle by mělo fungovat:
    #!/usr/bin/env perl -w0n
    
    my @ctx = m{
    	<tr[^>]*>\s*
    	<td[^>]*>([^<]*)</td>\s*
    	<td[^>]*>([^<]*)</td>\s*
    	(?:<td[^>]*>[^<]*</td>\s*)*
    	<td[^>]*><input\s*onclick="(.*?)">
    	(?{print "$1;$2;$3\n"})
    }gsx;
    
    Byl bych řekl, že místo těžkopádného [^>]* (cokoliv kromě znaku >) bude fungovat i skromné srovnávání (.*?), ale to mi z nějakého důvodu nešlo.
    zoul avatar 3.11.2007 19:34 zoul | skóre: 43 | blog: | Boskovice
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    P.S. Na nedávno skončené Pittsburgské perlové dílně se objevila přednáška Essential Perl One-liners [PDF], stručné a užitečné čtení.
    3.11.2007 20:09 Filip Jirsák | skóre: 66 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Prožeňte to HTML Tidy, ať z toho získáte XHTML (jsou tací, kteří tvrdí, že to, že HTML není XML není žádná nevýhoda), a pak použijte následující XSLT:
    <?xml version="1.0" encoding="UTF-8" ?>
    <xsl:stylesheet
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      version="1.0">
      
      <xsl:output method="text"/>
    
      <xsl:template match="/html/body/table/tbody/tr/td/div/table/tbody/tr[td[last()]/input]">
    <xsl:value-of select="td[1]"/>;<xsl:value-of select="td[2]"/>;<xsl:value-of select="td[last()]/input/@onclick"/>
    <xsl:text>&#13;&#10;</xsl:text>
      </xsl:template>
    	
      <xsl:template match="*"><xsl:apply-templates select="*" /></xsl:template>
    </xsl:stylesheet>
    
    5.11.2007 13:24 David Jaša | skóre: 44 | blog: Dejvův blog
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Někde v té XSLT je chyba - nic se na stdout nevypíše. Když spustím xsltproc ukecaně, tak na stderr vypíše toto:
    creating dictionary for stylesheet
    reusing dictionary from opory.xsl for stylesheet
    xsltParseStylesheetProcess : found stylesheet
    xsltPrecomputeStylesheet: removing ignorable blank node
    xsltParseTemplateContent: removing text
    xsltCompilePattern : parsing '/html/body/table/tbody/tr/td/div/div/table/tbody/tr[td[last()]/input]'
    xsltCompilePattern : parsed /html/body/table/tbody/tr/td/div/div/table/tbody/tr[td[last()]/input], default priority 0.500000
    added pattern : '/html/body/table/tbody/tr/td/div/div/table/tbody/tr[td[last()]/input]' priority 0.500000
    xsltCompilePattern : parsing '*'
    xsltCompilePattern : parsed *, default priority -0.500000
    added pattern : '*' priority -0.500000
    parsed 2 templates
    Resolving attribute sets references
    Creating sub-dictionary from stylesheet for transformation
    Registered 0 modules
    reusing transformation dict for output
    Registering global variables
    Registering global variables from opory.xsl
    xsltProcessOneNode: no template found for /
    xsltProcessOneNode: applying template '*' for html
    xsltApplyTemplates: node: 'html'
    xsltApplyTemplates: select *
    xsltApplyTemplates: list of 2 nodes
    (...)
    xsltProcessOneNode: applying template '*' for tr
    xsltApplyTemplates: node: 'tr'
    xsltApplyTemplates: select *
    xsltApplyTemplates: list of 6 nodes
    xsltProcessOneNode: applying template '*' for td
    xsltApplyTemplates: node: 'td'
    xsltApplyTemplates: select *
    xsltApplyTemplates: list of 0 nodes
    xsltProcessOneNode: applying template '*' for td
    xsltApplyTemplates: node: 'td'
    xsltApplyTemplates: select *
    xsltApplyTemplates: list of 0 nodes
    xsltProcessOneNode: applying template '*' for td
    xsltApplyTemplates: node: 'td'
    xsltApplyTemplates: select *
    xsltApplyTemplates: list of 0 nodes
    xsltProcessOneNode: applying template '*' for td
    xsltApplyTemplates: node: 'td'
    xsltApplyTemplates: select *
    xsltApplyTemplates: list of 0 nodes
    xsltProcessOneNode: applying template '*' for td
    xsltApplyTemplates: node: 'td'
    xsltApplyTemplates: select *
    xsltApplyTemplates: list of 0 nodes
    xsltProcessOneNode: applying template '*' for td
    xsltApplyTemplates: node: 'td'
    xsltApplyTemplates: select *
    xsltApplyTemplates: list of 1 nodes
    xsltProcessOneNode: applying template '*' for input
    xsltApplyTemplates: node: 'input'
    xsltApplyTemplates: select *
    xsltApplyTemplates: list of 0 nodes
    a v podobném duchu pokračuje dalších ~ 17k řádků.
    5.11.2007 13:49 Filip Jirsák | skóre: 66 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Asi to html vypadá trochu jinak, než jak vypadal příklad uvedený zde v diskuzi. Bude potřeba upravit ten XPath výraz
    /html/body/table/tbody/tr/td/div/table
    tak, aby se chytil na tu správnou tabulku. Pokud v tom html jsou nějaká id, je nejlepší se chytit na ně. Jinak je potřeba zvolit správné pořadí elementů. Pokud ty tagy <input> jinde na stránce nejsou, můžete taky zkusit
    /html/body//table/tbody/tr[td[last()]/input]
    5.11.2007 23:34 David Jaša | skóre: 44 | blog: Dejvův blog
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Jediný rozdíl je, že jsou v sobě dva div-y, což jsem přidal do xpath výrazu:
    /html/body/table/tbody/tr/td/div/div/table/tbody/tr[td[last()]/input]
    a výsledek jsem posílal minule.
    Pokud v tom html jsou nějaká id, je nejlepší se chytit na ně.
    Vnější div má id "p_r_i_n_t". Zkusil jsem vztáhnout xpath výraz od něj:
    id('p_r_i_n_t')/div/table/tbody/tr[td[last()]/input]
    a výsledek se od předchozího nijak neliší:
     Celé XML sem nechci posílat, tak dávám alespoň odkaz na zastřelenou obrazovku DOM inspektoru.
                
    6.11.2007 09:05 Filip Jirsák | skóre: 66 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Zkusil bych
    //div[@id='p_r_i_n_t']/div/table/tbody/tr[td[last()]/input]
    
    A podívejte se, jak jsou tagy zapsané v tom očištěném (XHTML) souboru, zda jsou malými písmeny, resp. přizpůsobte velikost písmen v XPath. Případně sem pošlete (nebo někam vystavte, přinejhorším pošlete e-mailem) alespoň začátek to XML – aby tam byl alespň jeden řádek s daty. Ta data a texty klidně nahraďte něčím jiným.
    6.11.2007 13:05 David Jaša | skóre: 44 | blog: Dejvův blog
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Díky za tip. Tagy v očištěném xhtml jsou všechny malými písmeny, hodnoty atributů jsou všechny v apostrofech. Nicméně DOM inspektor pěkně kecá, protože žádný tag tbody v původním ani očištěném html není! Očištěné xhtml už je lidsky čitelné a relevantní část vypadá takto:
    <div id='p_r_i_n_t'>
    <div align='center'>
    <h2>nadpis 2</h2>
    <p>lorem ipsum ...</p>
    <table border='1'>
    <tr>
    <th>nadpis 1</th>
    <th>nadpis 2</th>
    <th>nadpis 3</th>
    <th>nadpis 4</th>
    <th>nadpis 5</th>
    <th>nadpis 6</th>
    </tr>
    <tr bgcolor="">
    <td>text11</td>
    <td>text12</td>
    <td>text13</td>
    <td align='right'>text14</td>
    <td align='right'>text15</td>
    <td><input type='button' value='Otevřít' onclick=
    'js_fce("id")' /></td>
    </tr>
    <tr bgcolor="#FFCCCC">
    <td>text21</td>
    <td>text22</td>
    <td>text23</td>
    <td align='right'>text24</td>
    <td align='right'>text25</td>
    <td><input type='button' value='Otevřít' onclick=
    'js_fce("id")' /></td>
    </tr>
    (...)
    </table>
    </div>
    </div>
    Xpath výraz jsem podle toho upravil takto:
    //div[@id='p_r_i_n_t']/div/table/tr[td[last()]/input]
    a xsltproc si stále mele svou:
    creating dictionary for stylesheet
    reusing dictionary from opory.xsl for stylesheet
    xsltParseStylesheetProcess : found stylesheet
    xsltPrecomputeStylesheet: removing ignorable blank node
    xsltParseTemplateContent: removing text
    xsltCompilePattern : parsing '//div[@id='p_r_i_n_t']/div/table/tr[td[last()]/input]'
    xsltCompilePattern : parsed //div[@id='p_r_i_n_t']/div/table/tr[td[last()]/input], default priority 0.500000
    added pattern : '//div[@id='p_r_i_n_t']/div/table/tr[td[last()]/input]' priority 0.500000
    xsltCompilePattern : parsing '*'
    xsltCompilePattern : parsed *, default priority -0.500000
    added pattern : '*' priority -0.500000
    parsed 2 templates
    Resolving attribute sets references
    Creating sub-dictionary from stylesheet for transformation
    Registered 0 modules
    reusing transformation dict for output
    Registering global variables
    Registering global variables from opory.xsl
    xsltProcessOneNode: no template found for /
    xsltProcessOneNode: applying template '*' for html
    xsltApplyTemplates: node: 'html'
    xsltApplyTemplates: select *
    xsltApplyTemplates: list of 2 nodes
    (...)
    xsltProcessOneNode: applying template '*' for div
    xsltApplyTemplates: node: 'div'
    xsltApplyTemplates: select *
    xsltApplyTemplates: list of 1 nodes
    xsltProcessOneNode: applying template '*' for div
    xsltApplyTemplates: node: 'div'
    xsltApplyTemplates: select *
    xsltApplyTemplates: list of 3 nodes
    xsltProcessOneNode: applying template '*' for h2
    xsltApplyTemplates: node: 'h2'
    xsltApplyTemplates: select *
    xsltApplyTemplates: list of 0 nodes
    xsltProcessOneNode: applying template '*' for p
    xsltApplyTemplates: node: 'p'
    xsltApplyTemplates: select *
    xsltApplyTemplates: list of 0 nodes
    xsltProcessOneNode: applying template '*' for table
    xsltApplyTemplates: node: 'table'
    xsltApplyTemplates: select *
    xsltApplyTemplates: list of 531 nodes
    (radek s nadpisy)
    xsltProcessOneNode: applying template '*' for td
    xsltApplyTemplates: node: 'td'
    xsltApplyTemplates: select *
    xsltApplyTemplates: list of 0 nodes
    xsltProcessOneNode: applying template '*' for td
    xsltApplyTemplates: node: 'td'
    xsltApplyTemplates: select *
    xsltApplyTemplates: list of 0 nodes
    xsltProcessOneNode: applying template '*' for td
    xsltApplyTemplates: node: 'td'
    xsltApplyTemplates: select *
    xsltApplyTemplates: list of 0 nodes
    xsltProcessOneNode: applying template '*' for td
    xsltApplyTemplates: node: 'td'
    xsltApplyTemplates: select *
    xsltApplyTemplates: list of 0 nodes
    xsltProcessOneNode: applying template '*' for td
    xsltApplyTemplates: node: 'td'
    xsltApplyTemplates: select *
    xsltApplyTemplates: list of 0 nodes
    xsltProcessOneNode: applying template '*' for td
    xsltApplyTemplates: node: 'td'
    xsltApplyTemplates: select *
    xsltApplyTemplates: list of 1 nodes
    xsltProcessOneNode: applying template '*' for input
    xsltApplyTemplates: node: 'input'
    xsltApplyTemplates: select *
    xsltApplyTemplates: list of 0 nodes
    6.11.2007 14:10 razor | skóre: 32
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Zdar, na to očištěné xhtml mi funguje tento stylesheet:
    
    <?xml version="1.0" encoding="UTF-8" ?>
    <xsl:stylesheet
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      version="1.0">
      
      <xsl:output method="text"/>
    
    <xsl:template match="tr[td[last()]/input]"> <xsl:value-of 
    select="td[1]"/>;<xsl:value-of select="td[2]"/>;<xsl:value-of 
    select="td[last()]/input/@onclick"/> <xsl:text>
    </xsl:text> 
    </xsl:template>
    
    <xsl:template match="/">
        <xsl:apply-templates select="//div[@id='p_r_i_n_t']/div/table"/>
    </xsl:template>
    
    </xsl:stylesheet> 
    
    
    6.11.2007 14:34 Filip Jirsák | skóre: 66 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Někdy se vyplatí nekotvit ten XPath výraz moc pečlivě :-) Takže s přeskočením nezajímavých textů by to mělo vypadat:
    <?xml version="1.0" encoding="UTF-8" ?>
    <xsl:stylesheet
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      version="1.0">
      
      <xsl:output method="text"/>
    
      <xsl:template match="tr[td[last()]/input]"><xsl:value-of 
        select="td[1]"/>;<xsl:value-of select="td[2]"/>;<xsl:value-of 
        select="td[last()]/input/@onclick"/><xsl:text>&#13;&#10;</xsl:text> 
      </xsl:template>
    
      <xsl:template match="/">
        <xsl:apply-templates select="//div[@id='p_r_i_n_t']/div/table"/>
      </xsl:template>
    
      <xsl:template match="*"><xsl:apply-templates select="*" /></xsl:template>
    
    </xsl:stylesheet> 
    
    6.11.2007 15:29 David Jaša | skóre: 44 | blog: Dejvův blog
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Hm, je zajímavé, že pokud oříznu celý strom XHTML na větev od <div> níže, transformace funguje, ale pokud mu podstrčím celé html, tak se mu nechce. Mimochodem umí XSL vyříznout z onoho <input onclick='jsFunkce("číselné_ID")'/>; ono číselné_ID?
    6.11.2007 15:47 Filip Jirsák | skóre: 66 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Není na začátku toho html uveden v tagu <html> jmenný prostor? Ale to by snad xsltproc něco zahlásil…

    Pokud je jsFunkce("…") (to okolo) vždy stejné, dalo by se použít funkcí substring a string-length, případně replace. Např.
    <xsl:value-of select="replace(td[last()]/input/@onclick,'jsFunkce\(&quot;(.*)&quot;\)','$1')"/>
    
    6.11.2007 16:12 David Jaša | skóre: 44 | blog: Dejvův blog
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Vypadá takto:
    <html xmlns="http://www.w3.org/1999/xhtml">
    Pokud je jsFunkce("…") (to okolo) vždy stejné, dalo by se použít funkcí substring a string-length, případně replace.
    Je. Takto to vypadá dobře, jestli to bude funkční uvidíme až po vyřešení toho namespace. :-)
    6.11.2007 16:23 Filip Jirsák | skóre: 66 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Přidejte ten namespace na začátek toho XSLT jako defaultní NS:
    <?xml version="1.0" encoding="UTF-8" ?>
    <xsl:stylesheet
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns="http://www.w3.org/1999/xhtml"
      version="1.0">
    …
    
    6.11.2007 17:11 David Jaša | skóre: 44 | blog: Dejvův blog
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Toto nepomohlo, tak jsem to dal pryč a místo toho umazal sedem zmínku o NS z tagu <html>. :-] (sed tam už stejně byl, nahrazoval entity &nbsp; na kterých xsltproc řval). Když jsem použil replace, tak to nahradilo pouze první řádek, tak jsem přesunul i tyto do sedu a tak se mi povedlo dostat vytoužené CSV:
    sed -e 's/\&nbsp;/ /g;s/<html[^>]*>/<html>/;s/jsFunkce(\"\([^"]*\)\")/\1/;'
    Díky všem za čas a pomoc. ;-)
    6.11.2007 14:38 Filip Jirsák | skóre: 66 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Nicméně DOM inspektor pěkně kecá, protože žádný tag tbody v původním ani očištěném html není!
    No jo, na tenhle oblíbený trik jsem zapomněl. On zobrazuje skutečný aktuální DOM dokumentu, tj. to co vznikne parsováním a „hádáním“ toho, jak ten dokument má správně vypadat.
    5.11.2007 13:57 Pavel Kysilka
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    tipuju, ze to nepujde proto, ze tidy Vam prida do html definici dokumentu a potom musite k jednotlivym elementum pristupovat pres namespace.

    Coz se da poresit tim, ze umazete DOCTYPE nebo xmlns namespace atribut vysledneho dokumentu z tidy.

    pripadne mi poslete mail a vysledna transformce se sem da hodit.

    bye gf
    5.11.2007 14:13 Filip Jirsák | skóre: 66 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Předpokládám, že by se o namespacech xsltproc v tom ukecaném výstupu zmínilo.
    2.11.2007 11:28 Tomáš | skóre: 29 | blog: Tomik
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Na podobne veci taham kanon v podobe Pythonu. Pokud je to HTML validni XML (zejmena nema neparove tagy), tak se da naparsovat do DOMu (neco na to v Pythonu je, ale myslim, ze ne ve standardni instalaci), a potom zkousim.

    Ten xslt styl je taky dobry napad. Neni mi moc jasne, proc se Ti nedari dostat, co potrebujes. Pomoci xpath se dostanes na tu spravnou tabulku a potom zkousis, jestli je tam onclick.
    2.11.2007 11:37 Pavel Kysilka
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    zdravim,

    podelte se s nami o xslt transformaci a jak to stihnu, tak Vam nejak poradim kudy dale. Zrovna resim csv formaty pro socialku generovane z xml. NIcmene si myslim, ze toto je jiz davno nekde hotovo.

    Nic proti jinym resenim, ale:

    mely by zvladnout toto, protoze jinak jsou chybne.

    <td

    atribut="hodnota"

    >

    text0

    text1 s odelovacem

    text2 s html entitou

    >/td>

    <td/>

    a tak dale

    bye gf
    2.11.2007 11:54 Pavel Kysilka
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    jeste me napadlo. vemte html tabulku a zpracujte ji kancelarskym balikem[OpenOffice,AbiWord) (jako sesit). Tedy pokud mate maly pocet dat.

    gf
    2.11.2007 22:31 Andrej Herceg | skóre: 43
    Rozbalit Rozbalit vše Re: Jak vypreparovat data z HTML tabulky do CSV?
    Ak toho nie je príliš veľa, tak sa dá použiť aj kombinácia Firefox+Greasemonkey+skript.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.