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: Previous1 2

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

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

Omlouvam se, problem zrejme nebyl v nepravidelnem kodu, mezerach nebo tabech, ale v prilis "hladovem" samotnem vyrazu, ktery i pres "nehladovy" kvantifikator *? zacinal nalez k nahrazeni prilis brzy a zabral casti napric prvky <Document>

pokusil jsem se o opravu vyhledavaciho vyrazu; bylo by to na prislusnem radku snad:

Quote:
outputTxt = outputTxt.replace(/<Document about="(?:(?!<Document)(?:[^\r]|(?:\r\n)))*?<Zdroj>helpnet\.cz<\/Zdroj>(?:(?!<Document)(?:[^\r]|(?:\r\n)))*?<\/Document>/g, "");

- je doplnen opakovany "negativni lookahead"
(?!<Document)
tj. pred kazdym z "libovolnych" znaku mezi otviracim a ukoncovacim tagem se overuje, jestli nenasleduje oteviraci tag <Document
- to by melo zabranit zahrnuti nahrazovaneho textu napric temito elementy <Document

Pri zkusebnim spusteni na poskytnutem xml bylo zjisteno 8 nalezu pro:
<Zdroj>helpnet.cz</Zdroj>
a odstranily se prislusne prvky Document (snad tentokrat spravne - podle srovnani kodu oproti puvodnimu).

Pokud jde o dalsi upravy zarazene v konvertoru vyse, melo by je take jit zahrnout; pokud spravne chapu, ze jde o odstraneni (nahrazeni za nic), bylo by to napr.

Quote:
outputTxt = outputTxt.replace(/Anotace:\{\[p class="anot2017"\]\}/g, "");
outputTxt = outputTxt.replace(/\{\[\/p \]\}/g, "");
outputTxt = outputTxt.replace(/\t\t/g, "");

Tady jde o prime nahrazovani presneho retezce, jen je treba predradit zpetne lomitko pred zvlastni znaky RE.

S regulernimi vyrazy se holt clovek ma porad dost co ucit (chybama...), hlavne jsou dost citlive na presny format dat, je treba hlidat, jestli jsou vystupy ocekavatelne...

Zdravim,
vbr

Options: Reply | Quote | Up ^


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

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

Jeste na doplneni k moznostem dalsich uprav -
Slo by napr. zkusit nahrady:

Quote:
outputTxt = outputTxt.replace(/<Document (?:(?!<Odkaz>)(?!<Document)(?:[^\r]|(?:\r\n)))+?<\/Document>/g, "");
outputTxt = outputTxt.replace(/<Document about="(?:(?!<Document)(?:[^\r]|(?:\r\n)))*?<Odkaz>http:\/\/[^\/]*\/?<\/Odkaz>(?:(?!<Document)(?:[^\r]|(?:\r\n)))*?<\/Document>/g, "");

prvni vyraz vymaze dokumenty, ktere neobsahuji tag <Odkaz>
(tech je ve vzorovem kodu 54).

druhy vyraz vymaze dokumenty, ktere v tagu odkaz maji webovou adresu bez vnitrnich lomitek, tj. jen v http:// a pripadne uplne na konci adresy
Výsledky hledání re výrazu: "/<Document about="(?:(?!<Document)(?:[^\r]|(?:\r\n)))*?<Odkaz>http:\/\/[^\/]*\/?<\/Odkaz>(?:(?!<Document)(?:[^\r]|(?:\r\n)))*?<\/Document>/g;

(Tech je v souboru XML 30.)

Jde uz ale o pomerne "labilni" upravy, je treba overit, jestli odpovidaji pozadavkumm, aby se eliminovalo mozne vyrazeni zadoucich polozek.

zdravim,
vbr

Options: Reply | Quote | Up ^


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

Posted by: Kráťa | Date: 2021-03-27 07:28 | IP: IP Logged

Je to pecka. Od původního dotazu se to díky tvé ochotě pěkně rozšířilo co?
Teď jsem to 2x udělal se scriptem, doplněným o to poslední a ušetří mi to půl hodiny pročítání nepotřebného balastu a 2 metry rolování.
A jak toho script už dělá nemálo, tak jsem dnes myslel, že zamrznul PSPad a měl jsem už nutkání ho ukončit Ctrl+Shift+Esc smiling smiley

--
--------

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

Options: Reply | Quote | Up ^


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

Posted by: vbr | Date: 2021-03-27 11:39 | IP: IP Logged

Zdravim,
diky, jsem rad, jestli to trochu pomuze (a snad to nepovede k nejakym ztratam, kdy by toho skript promazal vic nez ma ...).
Na podobe veci skripty v PSPadu obcas pouzivam, to je pro me jedna z vybornych vlastnosti PSPadu.
vbr

Options: Reply | Quote | Up ^


Goto Page: Previous1 2





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