[php] XML nodevalue aanpassen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Tweaqer
  • Registratie: November 2002
  • Laatst online: 28-06 23:13
Ik ben een beetje lekker aan het hobbyen en zit met een probleempje.
Ik heb een XML/RSS die ik uitlees in een functie, maar voordat hij deze opslaat wil ik dat hij de titels in de xml aanpast. Ik wil graag het stukje met brackets weg hebben en de tekst die erna komt klein hebben omdat ze nu alleen maar uit hoofdletters bestaan. De XML ziet er ongeveer zo uit:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            <item>
                <title>[ details ] DIT IS DE TITEL</title>
                <description><![CDATA[Dit is de omschrijving van het object]]> </description>
                <link>http://www.website.nl/</link>
                <guid>http://www.website.nl/</guid>
                <pubDate>Thu, 18 Mei 2012 22:51:06 +0200</pubDate>
            </item>
            <item>
                <title>[ details ] DIT IS OOK EEN TITEL</title>
                <description><![CDATA[Dit is de omschrijving van het tweede object]]> </description>
                <link>http://www.website.nl/</link>
                <guid>http://www.website.nl/</guid>
                <pubDate>Thu, 19 Mei 2012 22:51:06 +0200</pubDate>
            </item>


Dit is de code die ik tot nu toe heb en waarmee het me niet lukt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?
      $content = file_get_contents($this->rssadres/);

        function hoofdletters($title) {
          $smallwordsarray = array(
            'of','a','the','and','an','or','nor','but','is','if','then','else','when',
            'at','from','by','on','off','for','in','out','over','to','into','with'
            );
          $words = explode(' ', $title);
          foreach ($words as $key => $word)
          {
            if ($key == 0 or !in_array($word, $smallwordsarray))
              $words[$key] = ucwords(strtolower($word));
          }
          $newtitle = implode(' ', $words);
          return $newtitle;
        }

        preg_match_all("/\<title\>(.*?)\<\/title\>/", $content, $gevonden);
        $vervangsels = hoofdletters($gevonden);
        $content = preg_replace("/\<title\>(.*?)\<\/title\>/", $vervangsels, $content);

?>


Helaas werkt het niet. Waar ik ook aan had gedacht is om preg_replace_callback als volgt te gebruiken:

PHP:
1
preg_replace_callback('/\<title\>(.*?)\<\/title\>/', 'hoofdletters', $content)."</pre>


Ik kom er zodoende dus niet helemaal uit, maar ik zie vast iets over het hoofd, denk in de verkeerde richting of kan het ook op een totaal andere manier? Thanks! _/-\o_

[ Voor 7% gewijzigd door Tweaqer op 20-05-2012 02:44 ]


Acties:
  • 0 Henk 'm!

  • Wiethoofd
  • Registratie: Juli 2007
  • Laatst online: 09-06 23:17

Wiethoofd

Broadcast TOM

Je gaat de mist in op regel 19, je doet een hoofdletters op een array.

Daarnaast is het gewoon logischer om met simpleXML oid even de RSS te parsen. (als het heel erg standaard RSS is kan je em zelfs met json_decode naar array casten)

Volg me op Twitter/X & Bluesky


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Waar hoort mijn topic?
WEB >> PRG

Tevens titlefix:
[php][xml] >> [php] XML nodevalue aanpassen

[ Voor 24% gewijzigd door RobIII op 18-05-2012 23:26 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Tweaqer
  • Registratie: November 2002
  • Laatst online: 28-06 23:13
Thanks RobIII :)
Wiethoofd schreef op vrijdag 18 mei 2012 @ 23:22:
Je gaat de mist in op regel 19, je doet een hoofdletters op een array.

Daarnaast is het gewoon logischer om met simpleXML oid even de RSS te parsen. (als het heel erg standaard RSS is kan je em zelfs met json_decode naar array casten)
Maar als ik met json decode naar een array kan ik nog steeds de functie (de regel 19 fout) niet toepassen omdat het een array is of dan wel? Wat adviseer je in dat geval?

Acties:
  • 0 Henk 'm!

  • Wiethoofd
  • Registratie: Juli 2007
  • Laatst online: 09-06 23:17

Wiethoofd

Broadcast TOM

Ipv de gehele array te pakken op regel 19 pak je $gevonden[1], dat is een string met je match.
If matches is provided, then it is filled with the results of search. $matches[0] will contain the text that matched the full pattern, $matches[1] will have the text that matched the first captured parenthesized subpattern, and so on.

Volg me op Twitter/X & Bluesky


Acties:
  • 0 Henk 'm!

  • Tweaqer
  • Registratie: November 2002
  • Laatst online: 28-06 23:13
Wiethoofd schreef op zaterdag 19 mei 2012 @ 12:40:
Ipv de gehele array te pakken op regel 19 pak je $gevonden\[1], dat is een string met je match.

[...]
Thanks voor je reactie :) Alleen is het dan nog wel lastig omdat de xml meer dan 1 item heeft toch?
Je kan dan wel een match[x++] doen maar dat lost het nog niet helemaal op.

[ Voor 10% gewijzigd door Tweaqer op 20-05-2012 02:48 ]


Acties:
  • 0 Henk 'm!

  • Wiethoofd
  • Registratie: Juli 2007
  • Laatst online: 09-06 23:17

Wiethoofd

Broadcast TOM

Doe voor de gein eens je preg_match met een $matches/$gevonden en doe direct de regel erna een print_r van je $matches/$gevonden array en kijk wat in welke plek in de array zit.

En als je eerst al je xml/rss inleest en omzet naar een array (eerder genoemde json_decode truuk) kan je gewoon je $xml[4]['title'] uitlezen en die specifiek matchen zonder dat je <title> in je preg_match nodig hebt.

Volg me op Twitter/X & Bluesky

Pagina: 1