Xml tarttalom kivágás és másolás CURL-al.
2019-11-09T12:49:48+01:00
2019-11-09T20:34:23+01:00
2022-08-19T00:42:35+02:00
Hutolada
Sziasztok. Azt szeretném kérdezni,hogy lehetséges-e egy művelettel.

Van egy xml file:
akarmi.xml

Ebből az első 6 sort szeretném törlni illetve az xml sorok mivel mindig változóak a legvégéről ezt:

</tv>


Az első 6 sor mindig ugyanaz (FIX)

A megmaradt adatot kiiratom echo-val,

Majd itt is még elvagyok akadva. A kiírt echo adatot szeretném beilleszteni egy már meglévő xml fájlba egy adott helyre.

ezen rész után:

</channel>


Vagy ez a rész elé:

</tv>

Majd a szerkesztett file mentése amit nap mint nap használok.

Köszönöm a segítséget előre.
Mutasd a teljes hozzászólást!
Végeredmény:

Halálmumia segített skypen.:

$nagyfajl= "/var/www/virtual/oldal.hu/sejt/htdocs/lista2.xml"; $m3musorfajl= "/var/www/virtual/oldal.hu/burok/htdocs/lista.xml"; $m3musor=file_get_contents($m3musorfajl); $nagyfajladat=file_get_contents($nagyfajl); $m3musor = str_ireplace('<?xml version="1.0" encoding="UTF-8"?>', '', $m3musor); $m3musor = str_ireplace('<tv generator-info-name="WebGrab+Plus/w MDB &amp; REX Postprocess -- version V2.1 -- Jan van Straaten" generator-info-url="http://www.webgrabplus.com">', '', $m3musor); $m3musor = str_ireplace('<display-name lang="hu">M3</display-name>', '', $m3musor); $m3musor = str_ireplace('<channel id="m3.hu">', '', $m3musor); $m3musor = str_ireplace('<url>http://www.mediaklikk.hu</url>', '', $m3musor); $m3musor = str_ireplace('<icon src="http://oldal.hu/ikon/26.png" />', '', $m3musor); $m3musor = str_ireplace('</channel>', '', $m3musor); $m3musor = str_ireplace('</tv>', '', $m3musor); $torles=str_ireplace("</tv>","",$nagyfajladat); $vegereiras=fopen($nagyfajl,"w"); fwrite($vegereiras,$torles.$m3musor."</tv>"); fclose($vegereiras); $data = implode("", file("/var/www/virtual/oldal.hu/epg/htdocs/lista2.xml")); $gzdata = gzencode($data, 9); $fp = fopen("/var/www/virtual/oldal.hu/epg/htdocs/lista2.xml.gz", "w"); fwrite($fp, $gzdata); fclose($fp);

Megnyitom mind a kettő xml-t. a lista.xml-ből kitörlöm a nem kellő részt.
Ezt sajnos akárhogy  is szerettem volna csak soronként engedi. (De megvan a böjtve)
a lista2.xml megnyitása után a </tv> részt eldobom. majd a részemre ideálsra szerkesztett lista.xml eredményét berakom </tv> taggal.
Ez azért fontos mert az xml zárás a végén fontos. Előzőleg a törlése ezért kellett mert különben nem tudom megfelelően behelyezni a komlpett csatorna műsorokat kódként.
Ezt a részt kell törölni az átírásra szánt fájl végén:
  </programme>
</tv>

A böjt viszont betöltéskor nem vehető észre mivel az xml használható. A baj ott van,hogy a kivágott 7 sorból törölte a karaktereket,de a sorokat nem. És mikor a végfejleményben nézzük legyen box vagy bármi nem veszünk észre hibát mert megeszi minden. De ha letöltjük és notepad++-ban megkeressük bizony ott van a 7 üres sor...

Mellékeltem egy képet.
És a végén miután minden megvolt és lezárva lett futtatok egy xml tömörítést gz-re.
A program kb 3-4 másodpercig dolgozik.
Mutasd a teljes hozzászólást!
Csatolt állomány

  • Hali!

    Mutasd – forráskóddal/-részlettel –, hogy eddig mivel, hogyan próbálkoztál, meddig jutottál el, mi nem megy, miben/hol akadtál el! Nem egyszer kértem már ezt. 

    Mutasd a teljes hozzászólást!
  • <?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, '/var/www/virtual/oldalam.hu/megdaral/htdocs/kurul.xml'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $html = curl_exec($ch); $string = $html; $patterns = array(); $patterns[0] = '/<?xml version="1.0" encoding="UTF-8"?> <tv generator-info-name="WebGrab+Plus/w MDB &amp; REX Postprocess -- version V2.1 -- Jan van Straaten" generator-info-url="http://www.webgrabplus.com"> <channel id="m3.hu"> <display-name lang="hu">M3</display-name> <icon src="http://epg.hu/ikon/26.png" /> <url>http://www.mediaklikk.hu</url>/'; $patterns[1] = '/</tr>/'; $replacements = array(); $replacements[1] = ''; $replacements[0] = ''; echo preg_replace($patterns, $replacements, $string); ?>

    Itt még van baj a kiírásnál azt még csinálom. Igazából a másik a meglévő xml megnyitás és az adott xml tartalmának a hozzáadásával vagyok bajban. Azt nem tudom,hogy lehetne megcsinálni. Hogy a jó xml-hez hozzáadjak adatot egy megfelelő helyre.
    Mutasd a teljes hozzászólást!
  • Hali!

    Ugyan nem megoldhatatlan a feladat sztring-kezeléssel, reguláris kifejezésekkel sem, viszont nem a megfelelő eszköz XML-kezelésre (ahogy' hangoztatom is sokszor: ne essünk abba a hibába, hogy mindent szögnek nézünk, ha kezünkben van a kalapács). Miért nem valami dedikált lehetőséget használsz? Itt van mindjárt pl. a SimpleXML.

    Mutasd a teljes hozzászólást!
  • Lassan alakul azért. Igaz kicsit más megoldást választottam:

    <?php $html = file_get_contents('/var/www/virtual/oldalam.hu/megdaral/htdocs/kurul.xml'); $html = str_replace($order, "", $html); $html = str_ireplace('<?xml version="1.0" encoding="UTF-8"?>', '', $html); $html = str_ireplace('<tv generator-info-name="WebGrab+Plus/w MDB &amp; REX Postprocess -- version V2.1 -- Jan van Straaten" generator-info-url="http://www.webgrabplus.com">', '', $html); $html = str_ireplace('<display-name lang="hu">M3</display-name>', '', $html); $html = str_ireplace('<channel id="m3.hu">', '', $html); $html = str_ireplace('<url>http://www.mediaklikk.hu</url>', '', $html); $html = str_ireplace('<icon src="http://epg.hu/ikon/26.png" />', '', $html); $html = str_ireplace('</channel>', '', $html); $html = str_ireplace('</tv>', '', $html); echo $html; ?>

    Most még az üres sorokat kell eltüntetnem utána szépen még a meglévő xml-hez kell hozzáadnom a mostani eredményt.
    Közben az xml mellé tartozó gz-t is le tudom gyártani egy füst alatt.:

    $data = implode("", file("/var/www/virtual/oldalam.hu/epg/htdocs/lista.xml")); $gzdata = gzencode($data, 9); $fp = fopen("/var/www/virtual/oldalam.hu/epg/htdocs/lista.xml.gz", "w"); fwrite($fp, $gzdata); fclose($fp);
    Mutasd a teljes hozzászólást!
  • Ha méret vagy idő vagy más korlát nem teszi szükségessé szerintem is érdemesebb dedikált eszközöket használni. 
    A legkésőbb a módosításoknál visszajön a befektetett munka.
    Mutasd a teljes hozzászólást!
  • Végeredmény:

    Halálmumia segített skypen.:

    $nagyfajl= "/var/www/virtual/oldal.hu/sejt/htdocs/lista2.xml"; $m3musorfajl= "/var/www/virtual/oldal.hu/burok/htdocs/lista.xml"; $m3musor=file_get_contents($m3musorfajl); $nagyfajladat=file_get_contents($nagyfajl); $m3musor = str_ireplace('<?xml version="1.0" encoding="UTF-8"?>', '', $m3musor); $m3musor = str_ireplace('<tv generator-info-name="WebGrab+Plus/w MDB &amp; REX Postprocess -- version V2.1 -- Jan van Straaten" generator-info-url="http://www.webgrabplus.com">', '', $m3musor); $m3musor = str_ireplace('<display-name lang="hu">M3</display-name>', '', $m3musor); $m3musor = str_ireplace('<channel id="m3.hu">', '', $m3musor); $m3musor = str_ireplace('<url>http://www.mediaklikk.hu</url>', '', $m3musor); $m3musor = str_ireplace('<icon src="http://oldal.hu/ikon/26.png" />', '', $m3musor); $m3musor = str_ireplace('</channel>', '', $m3musor); $m3musor = str_ireplace('</tv>', '', $m3musor); $torles=str_ireplace("</tv>","",$nagyfajladat); $vegereiras=fopen($nagyfajl,"w"); fwrite($vegereiras,$torles.$m3musor."</tv>"); fclose($vegereiras); $data = implode("", file("/var/www/virtual/oldal.hu/epg/htdocs/lista2.xml")); $gzdata = gzencode($data, 9); $fp = fopen("/var/www/virtual/oldal.hu/epg/htdocs/lista2.xml.gz", "w"); fwrite($fp, $gzdata); fclose($fp);

    Megnyitom mind a kettő xml-t. a lista.xml-ből kitörlöm a nem kellő részt.
    Ezt sajnos akárhogy  is szerettem volna csak soronként engedi. (De megvan a böjtve)
    a lista2.xml megnyitása után a </tv> részt eldobom. majd a részemre ideálsra szerkesztett lista.xml eredményét berakom </tv> taggal.
    Ez azért fontos mert az xml zárás a végén fontos. Előzőleg a törlése ezért kellett mert különben nem tudom megfelelően behelyezni a komlpett csatorna műsorokat kódként.
    Ezt a részt kell törölni az átírásra szánt fájl végén:
      </programme>
    </tv>

    A böjt viszont betöltéskor nem vehető észre mivel az xml használható. A baj ott van,hogy a kivágott 7 sorból törölte a karaktereket,de a sorokat nem. És mikor a végfejleményben nézzük legyen box vagy bármi nem veszünk észre hibát mert megeszi minden. De ha letöltjük és notepad++-ban megkeressük bizony ott van a 7 üres sor...

    Mellékeltem egy képet.
    És a végén miután minden megvolt és lezárva lett futtatok egy xml tömörítést gz-re.
    A program kb 3-4 másodpercig dolgozik.
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Hali!

    Szuper, hogy sikerült, de eléggé ingatag lábakon áll ez a megoldás. Amint valamelyik node az XML-fájlban megváltozik – és itt elég csak egy pluszban bekerült szóközre gondolni pl. –, már zavaros lesz az eredmény. SimpleXML használatával néhány sorból megoldható lett volna ez az egész, és jóval biztosabb, hibatűrőbb lenne, nem kellene sztringekkel bűvészkedned. Valami hasonló (persze, pontosabbat csak a konkrét XML-fájlok ismeretében lehetne):
    $nagyfajl = "/var/www/virtual/oldal.hu/sejt/htdocs/lista2.xml"; $m3musorfajl = "/var/www/virtual/oldal.hu/burok/htdocs/lista.xml"; $nagyfajladat = simplexml_load_string($nagyfajl); $m3musor = simplexml_load_string($m3musorfile); $tv = dom_import_simplexml($nagyfajladat->xpath('/tv')[0]); $progs = $m3musor->xpath('/tv/channel/programme'); foreach ($progs as $p) { $tv->appendChild(dom_import_simplexml($tv)->ownerDocument->importNode(dom_import_simplexml($p), true)); } $nagyfajladat->asXML($nagyfajl); $xmlString = $nagyfajladat->asXML(); $fp = fopen('/var/www/virtual/oldal.hu/epg/htdocs/lista2.xml.gz', 'w'); fwrite($fp, gzencode($xmlString, 9)); fclose($fp);
    Mutasd a teljes hozzászólást!
abcd