You are here: PSPad forum > České diskuzní fórum > Nak nahradit víceřádkové části XML souboru?

Nak nahradit víceřádkové části XML souboru?

Goto Page: 1 2 Next

#1 Nak nahradit víceřádkové části XML souboru?

Posted by: Kráťa | Date: 2021-03-19 13:59 | IP: IP Logged

Ahoj, denně mi chodí XML soubor (monitoring médií), který zpracovávám (dávám z něj články na helpnet.cz).
Nově mi dávají do souboru články, které jsem vkládal já sám na Helpnet den před tím. To mě strašně mate a zdržuje, jelikož si třeba dám do schránky titulek a potom se všimnu, že to je z Helpnetu.
Šlo by nějakým uživatelským konvertorem celé toto ze souboru odstranit? Vypadá to takto:

<Document about="WC_C20210318370033: FN Ostrava: Oční klinika zmodernizovala Centrum pro děti s vadami zraku a pořídila nové přístroje pro dospělé">
<Hlavicka_Clanku>
<Skore>0.94</Skore>
<Nazev>FN Ostrava: Oční klinika zmodernizovala Centrum pro děti s vadami zraku a pořídila nové přístroje pro dospělé</Nazev>
<Zdroj>helpnet.cz</Zdroj>
<Datum>18.03.2021</Datum>
<Odkaz>www.helpnet.cz;
<Oblast>WWW - cz</Oblast>
<ProfilID>BMI</ProfilID>
<Zpracovano>18.03.2021 9:40:13</Zpracovano>
<Jazyk>cz</Jazyk>
<Zkratka_oblasti>WC</Zkratka_oblasti>
<Zkratka_zdroje>WC_C</Zkratka_zdroje>
<Identifikace>WC_C20210318370033</Identifikace>
<Domicil>OPCZ21771110.txt</Domicil>
<Klicova_slova>vadami (3); zraku (3)</Klicova_slova>
<ProfilSymbol>bmi1</ProfilSymbol>
<Zkratka_skupiny>W2</Zkratka_skupiny>
<HASH>cb652oybha</HASH>
</Hlavicka_Clanku>
<Text_Clanku>18.03. 2021 - 09:12

Centrum pro děti s vadami zraku Oční kliniky FN Ostrava, které slouží dětem z celého Moravskoslezského kraje, prošlo očekávanou rekonstrukcí. A díky sponzorským příspěvkům se podařilo obměnit také mobiliář a vyšetřovnu všeobecné oční ambulance. Klinika je vybavena i novými špičkovými vyšetřovacími přístroji....

hospitalin.cz

Monitoring médií
</Text_Clanku>
</Document>

Prostě všechno, kde je <Zdroj>helpnet.cz</Zdroj>, tak odstranit od <document... po</document>.
PSPad to určitě bude umět.

--
--------

Třeba to PSPad dávno umí, pouze to neumím já.
Kráťa s vypnutým zvukem

Edited 1 time(s). Last edit at 2021-03-19 14:05 by Kráťa.

Options: Reply | Quote | Up ^


#2 Re: Nak nahradit víceřádkové části XML souboru?

Posted by: vbr | Date: 2021-03-20 12:27 | IP: IP Logged

Zdravim,
bohuzel nevim o zpusobu v ramci vlastnich funkci PSPadu - hlavne kvuli aktualnimu fungovani hledani jen v ramci radky.
Jde to ale obejit pomoci skriptovani s nahrazeni regulernim vyrazem, napr. v mem "Lacinem RE"
www.vbr.wz.cz

by byl nahrazovaci vyraz treba:
/<Document about="(?:[^\r]|(?:\r\n))*?<Zdroj>helpnet\.cz<\/Zdroj>(?:[^\r]|(?:\r\n))*?<\/Document>/g, ""

- nahrazeni prazdnym retezcem, odstrani se vsechny (nejkratsi) segmenty <Document about= ... <\/Document>
pokud je mezi nimi uvedeny tag <Zdroj>...

XML by se "oficialne" nemelo zpracovavat textovym nahrazovanim, ale taky si myslim, ze je to casto praktictejsi nez parsovani znovuvytvoreni po uprave... V tomhle pripade by se snad nemelo nic nezadouciho stat (pokud zachytne body nahrazovani nebudou ve zdroji na jinych mistech nez jako tagy - napr. jako obsah retezce).

Takovy skript by eventualne mohl byt jednoucelovy, tj. prime nahrazeni prednastavenym vyrazem po vyvolani.

Vicekrokova moznost v ramci PSPadu by byla:
zapnout zvyraznovac XML
vyhledat: <Zdroj>helpnet
vyhledat z dane pozice pozpatku: <Document
pouzit funkci: Upravy: Oznacit element (Ctrl+Shift+T)
smazat vybrany prvek

Zdravim,
vbr

Options: Reply | Quote | Up ^


#3 Re: Nak nahradit víceřádkové části XML souboru?

Posted by: Kráťa | Date: 2021-03-21 09:20 | IP: IP Logged

Moc dík za odpověď, script a regulerní výraz. Vypadá to nadějně. Jen nevím, jak to spustit.
Normálně se to nalinkuje do dokumentu (do toho XML), jako každý jiný script v HTML?
Řádím takto a teď mě to právě děsně zdržuje.
www.youtube.com

--
--------

Třeba to PSPad dávno umí, pouze to neumím já.
Kráťa s vypnutým zvukem

Options: Reply | Quote | Up ^


#4 Re: Nak nahradit víceřádkové části XML souboru?

Posted by: vbr | Date: 2021-03-21 11:29 | IP: IP Logged

Kráťa:
Moc dík za odpověď, script a regulerní výraz. Vypadá to nadějně. Jen nevím, jak to spustit.
Normálně se to nalinkuje do dokumentu (do toho XML), jako každý jiný script v HTML?
Řádím takto a teď mě to právě děsně zdržuje.
www.youtube.com

Zdravim,
soubor skriptu je treba ulozit do podadresare PSPadu podle typu a pak obnovit nacteni z menu Skripty: Rekompilace skriptu (totez se automaticky udela pri kazdem spusteni PSPadu). Pokud by skriptovani nebylo zapnute, je treba je aktivovat v Nastaveni: Nastaveni programu: Integrace do systemu: [x] Podpora skriptovani pomoci WSH

Pro zmineny jednoucelovy skript je treba nasledujici kod ulozit do souboru v uvedenem podadresari PSPadu, napr.:
... PSPad\Script\JScript\regexReplace.js

Podle radky ve funkci Init() se prida polozka pod menu ve skriptech a lze priradit klavesovou zkratku - oboji jde v kodu upravit - je dulezite, aby zkratka nekolidovala s necim dalsim (globalni ve windows, ve funkcich PSPadu a ani sablonach - treba HTML, XML - a ani v pripadnych jinych skriptech).

Podle potreby je mozne radek s vyrazem upravovat, pripadne pouzit vice takovych radek po sobe a provest postupne nahrazeni jednim spustenim skriptu:

outputTxt = outputTxt.replace(/RE_k_vyhledani/g, "RE_pro_nahrazeni");

(Pokud hledany text ma obsahovat lomitko, je treba pred ne pridat jeste zpetne: \/ podobne jako pred zvlastni znaky RE.

Jako zastupny kod pro libovolny znak vcetne konce radku (namisto tecky . v regulernich vyrazech) se mi nejlepe osvedcuje:
(?:[^\r]|(?:\r\n))
pro libovolny znak krome konce radku:
[^\r\n]
- je to kvuli dvouznakovemu zalomeni radku ve windows, tecka . zahrnuje \r ale ne \n )

Zdravim,
vbr

Quote:
//////////////////// ... PSPad\Script\JScript\regexReplace.js ////////////////////////
var module_name = "regexReplace";
var module_ver = "1";

function regexReplace(){
// nahrazeni (regex) v celem aktivnim textu
if (editorsCount()<1){return;}
var actEd = newEditor();
actEd.assignActiveEditor();
var outputTxt = actEd.text();
//re vyraz lze upravit, i pridat dalsi radky pro vicenasobne postupne nahrazeni
outputTxt = outputTxt.replace(/<Document about="(?:[^\r]|(?:\r\n))*?<Zdroj>helpnet\.cz<\/Zdroj>(?:[^\r]|(?:\r\n))*?<\/Document>/g, "");
actEd.text(outputTxt);
}

function Init(){
addMenuItem("regex - promazat XML", "", "regexReplace","Ctrl+Shift+Q"); // nazev v menu a klavesovou zkratku lze upravit
}

Edited 1 time(s). Last edit at 2021-03-21 11:36 by vbr.

Options: Reply | Quote | Up ^


#5 Re: Nak nahradit víceřádkové části XML souboru?

Posted by: Kráťa | Date: 2021-03-23 11:02 | IP: IP Logged

Hlásím, že to je super a dělá to přesně to, co jsem potřeboval. Děkuji 1 256x.
Ještě chci nahrazovat i to, co mám v konvertoru, abych nemusel spouštět dvě věci. Snad na to přijdu. Jdu studovat javascript. První pokus

(/<?xml version="1.0" encoding="windows-1250" ?>/g, "<?xml version="1.0" encoding="windows-1250" ?> <?xml-stylesheet type="text/css" href="-data.css"?>");

se nepovedl sad smiley

edit:// To budou dělat ty uvozovky asi že?

--
--------

Třeba to PSPad dávno umí, pouze to neumím já.
Kráťa s vypnutým zvukem

Edited 1 time(s). Last edit at 2021-03-23 11:11 by Kráťa.

Options: Reply | Quote | Up ^


#6 Re: Nak nahradit víceřádkové části XML souboru?

Posted by: vbr | Date: 2021-03-23 15:51 | IP: IP Logged

Kráťa:
Hlásím, že to je super a dělá to přesně to, co jsem potřeboval. Děkuji 1 256x.
Ještě chci nahrazovat i to, co mám v konvertoru, abych nemusel spouštět dvě věci. Snad na to přijdu. Jdu studovat javascript. První pokus

(/<?xml version="1.0" encoding="windows-1250" ?>/g, "<?xml version="1.0" encoding="windows-1250" ?> <?xml-stylesheet type="text/css" href="-data.css"?>");

se nepovedl sad smiley

edit:// To budou dělat ty uvozovky asi že?

Zdravim,
jestli se nepletu, mohlo by fungovat nasledujici nahrazeni - jako dalsi radek ve skriptu na miste s outputTxt = outputTxt.replace( ...):

Quote:
outputTxt = outputTxt.replace(/<\?xml version="1\.0" encoding="windows-1250" \?>/g, '<?xml version="1.0" encoding="windows-1250" ?> <?xml-stylesheet type="text/css" href="-data.css"?>');

uvozovky jsou problem v ramci nahrazovaci casti, ktera je samotna v uvozovkach, nejjednodussi je pro ni pouzit jednoduche uvozovky, pak muze retezec k nahrazeni zustat beze zmeny.

v hledacim vyrazu mezi lomitky muzou dvojite uvozovky zustat, je ale treba predradit zpetne lomitko pred otazniky a tecky, to jsou zvlastni znaky regulernich vyrazu.

Snad to pomuze, pripadne to jeste pujde doladit.
Zdravim,
vbr

Edited 1 time(s). Last edit at 2021-03-23 15:52 by vbr.

Options: Reply | Quote | Up ^


#7 Re: Nak nahradit víceřádkové části XML souboru?

Posted by: Kráťa | Date: 2021-03-24 07:47 | IP: IP Logged

To je úplně super! Při zkoušce na včerejším souboru to funguje, tak to asi bude dobré i na dnešním novém.
Děkuji moc za ty scripty. Já v javascriptech plavu, jako Venclovský v kanále. smiling smiley

--
--------

Třeba to PSPad dávno umí, pouze to neumím já.
Kráťa s vypnutým zvukem

Options: Reply | Quote | Up ^


#8 Re: Nak nahradit víceřádkové části XML souboru?

Posted by: Kráťa | Date: 2021-03-24 08:30 | IP: IP Logged

Tak je ještě někde chybka. Přišel mi XML a v něm bylo 233 článků, z toho byly z Helpnetu asi 3.
Když jsem na soubor aplikoval script, zbylo ze všech článků jen asi 6, místo 230.
Navíc jsem přišel na to, že konvertor mi odstraňuje i tabulátor na začátku odstavce.
A vylepšení, co mě napadlo, pro zkrácené pročítání souboru (což zabírá nejvíc času ze všeho), že by tím scriptem šlo asi i udělat, aby se smazaly články, kde není <URL> na článek, ale třeba jen na hlavní stranu nějakého média (vyjde to v papírovém, na webu to nemají). Takové totiž nesmím vkládat. Ale zároveň, aby zůstaly články z rozhlasů a televizí, kde také není URL, ale ty vkládám.

--
--------

Třeba to PSPad dávno umí, pouze to neumím já.
Kráťa s vypnutým zvukem

Options: Reply | Quote | Up ^


#9 Re: Nak nahradit víceřádkové části XML souboru?

Posted by: vbr | Date: 2021-03-24 09:24 | IP: IP Logged

Kráťa:
Tak je ještě někde chybka. Přišel mi XML a v něm bylo 233 článků, z toho byly z Helpnetu asi 3.
Když jsem na soubor aplikoval script, zbylo ze všech článků jen asi 6, místo 230.
Navíc jsem přišel na to, že konvertor mi odstraňuje i tabulátor na začátku odstavce.
A vylepšení, co mě napadlo, pro zkrácené pročítání souboru (což zabírá nejvíc času ze všeho), že by tím scriptem šlo asi i udělat, aby se smazaly články, kde není <URL> na článek, ale třeba jen na hlavní stranu nějakého média (vyjde to v papírovém, na webu to nemají). Takové totiž nesmím vkládat. Ale zároveň, aby zůstaly články z rozhlasů a televizí, kde také není URL, ale ty vkládám.

Zdravim,
to je bohuzel riziko tohoto typu zpracovani XML jako textoveho souboru...
snad to pujde nejak doladit.
Je soubor XML uplny a "validni", tj. napr. pri otevreni ve webovem prohlizeci se nehlasi chyby?
Jendoduche vysvetleni by bylo, kdyby napr. nekde chybel zaviraci tag </Document>, ale to asi neni moc pravdepodobne.
Mozne by bylo, ze na nekterych mistech je trochu jiny format, muze jit o rozdil, ktery v ramci XML nehraje roli - napr. mezery, tabulatary, typy uvozovek, zalomeni radky v ramci definice tagu ..., ale pro nahrazovaci skript uz to jsou rozdily, se kterymi nepocita a potom zahrne vetsi casti textu az k dalsimu presne ocekavanemu ukoncovacimu tagu.

Pokud by bylo mozne zdrojovy soubor nejak zpristupnit, muzu se zkusit podivat na problematicke nahrazeni, pripadne by to slo mailem; v adrese je jmeno jako tady ve foru; na email.cz.

Pokud jde textove rozeznat URL nemirici na jednotlivy clanek (napr. adresa konci domenou .cz ?), a zaroven ponechat zahrnute jine zdroje podle pozadavku, melo by jit takovou upravu zahrnout jako dalsi krok do skriptu.
Dulezite je, jako obecne u regularnich vyrazu, nemit jednotlive kroky nahrazeni moc "hladove"/"zrave".

Trochu slozitejsi alternativou je nepouzivat nahrazovani, resp. mazani nevyhovujicich casti naopak vypis nalezenych vyhovujicich, evenutalne kombinaci obojiho. To muze ale vyzadovat jeste individualejsi obsluhu, nastavovani a overovani vystupu/hlidani chyb...

Zdraivm,
vbr

Options: Reply | Quote | Up ^


#10 Re: Nak nahradit víceřádkové části XML souboru?

Posted by: Kráťa | Date: 2021-03-24 15:49 | IP: IP Logged

vbr:
...Mozne by bylo, ze na nekterych mistech je trochu jiny format, muze jit o rozdil, ktery v ramci XML nehraje roli - napr. mezery, tabulatary, typy uvozovek, zalomeni radky v ramci definice tagu ..., ale pro nahrazovaci skript uz to jsou rozdily, se kterymi nepocita a potom zahrne vetsi casti textu az k dalsimu presne ocekavanemu ukoncovacimu tagu.

To bude asi ono. Někde totiž zrovna ty tabulátory jsou a někde ne. Proto je i vyndávám. Zkusím napsat do Annopress, jestli by mi mohli ten Helpnet z posílání vyndat (nikdy tam nebyl - udělali nový formát).
Zatím to ošetřím takto:
Do konvertoru si přidám, aby se <zdroj>helpnet.cz</zdroj> nahradilo za <helpnet>helpnet</helpnet>
a v CSS, který linkuji, udělám:

helpnet {
color: #FF0000; font-weight: bold; font-size: 180%;
}

...Po pár minutách - vypadá to, že to bude vidět dobře. Jsem jako lstivý Af(g)hánec.

image

Ty soubory jsou tady:
XML (originál - pouze přejmenovaný)
kochlear.cz
konvertor
kochlear.cz
CSS
kochlear.cz

Uvidím, co odepíší z Annopress a potom s tím budu případně pokračovat.
Ještě jednou dík.

--
--------

Třeba to PSPad dávno umí, pouze to neumím já.
Kráťa s vypnutým zvukem

Options: Reply | Quote | Up ^


Goto Page: 1 2 Next





Editor PSPad - freeware editor, © 2001 - 2021 Jan Fiala, Hosted by Webhosting TOJEONO.CZ, design by WebDesign PAY & SOFT, code Petr Dvořák, Privacy policy and GDPR