[Php] str_replace [tag]tekst[/tag] => [tag1]tekst[/tag1]

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • 0fbe
  • Registratie: Januari 2004
  • Laatst online: 20-09 07:25
Mijn probleempje :)
Ik ben bezig met het converteren van een Html tabel naar XML, hier zit ik met het volgende probleem;
Ik wil dit;
code:
1
<TR valign="top"><TD>30-03-2005&nbsp;&nbsp;&nbsp;</TD>


Converten in dit

code:
1
<date>30-03-2005&nbsp;&nbsp;&nbsp;</date>


Het probleem is dat </TD> voorkomt in meerdere tags waarbij niet het tag </date> moet komen.
Daarom zoek ik naar een manier om dus [tekst]no-matter-wat-hier-staat[/tekst] te vervangen naar [andere]no-matter-wat-hier-staat[/andere]

Ik hoop dat ik een beetje duidelijk ben

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Met een regular expression kom je er wel, vermoed ik:
PHP:
1
2
3
$txt = '<TR valign="top"><TD>30-03-2005&nbsp;&nbsp;&nbsp;</TD>';
$txt = preg_replace("#<td[^<>]*>(.*?)</td>#iu", '<date>$1</date>', $txt);
echo $txt;

[ Voor 72% gewijzigd door NMe op 29-03-2005 18:33 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • maurad3r
  • Registratie: Oktober 2004
  • Laatst online: 18-09 12:34
als je perse met str_replace wilt werken, dan doe je het zo:

code:
1
2
3
4
<?
$input = str_replace ( "<TR valign=\"top\"><TD>", "<date>", $input );
$input = str_replace ( "</TD>", "</date>", $input );
?>


maargoed, dit lijkt mij niet een geweldige manier, omdat hij zo alle TD's oa wegfiltert, ik zou gebruik maken van een regex, maarja tis jou feesie :)

Acties:
  • 0 Henk 'm!

  • 0fbe
  • Registratie: Januari 2004
  • Laatst online: 20-09 07:25
Maurad3r schreef op dinsdag 29 maart 2005 @ 18:05:
als je perse met str_replace wilt werken, dan doe je het zo:

code:
1
2
3
4
<?
$input = str_replace ( "<TR valign=\"top\"><TD>", "<date>", $input );
$input = str_replace ( "</TD>", "</date>", $input );
?>


maargoed, dit lijkt mij niet een geweldige manier, omdat hij zo alle TD's oa wegfiltert, ik zou gebruik maken van een regex, maarja tis jou feesie :)
Dit kan dus niet omdat </TD> ook gebruikt word voor andere tags, de unieke combinatie alleen mag gereplaced worden

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

timcooijmans schreef op dinsdag 29 maart 2005 @ 18:07:
Dit kan dus niet omdat </TD> ook gebruikt word voor andere tags, de unieke combinatie alleen mag gereplaced worden
</td> kan alleen gebruikt worden om <td> tags af te sluiten. Dus ik snap niet echt waar je heen wilt? De code die ik hierboven postte zal alles tussen <td> (al dan niet met aparte attributen) en </td> nemen, en daarna tussen <date> en </date> zetten. Uiteindelijk hou je geen <td>'s meer over. Als dat niet is wat je wil (wat ik me heel goed voor kan stellen 8)7) dan zul je toch echt iets specifieker moeten zijn in je probleemstelling...aan welk patroon moet datgene wat vervangen moet worden voldoen?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • 0fbe
  • Registratie: Januari 2004
  • Laatst online: 20-09 07:25
-NMe- schreef op dinsdag 29 maart 2005 @ 18:16:
[...]

</td> kan alleen gebruikt worden om <td> tags af te sluiten. Dus ik snap niet echt waar je heen wilt? De code die ik hierboven postte zal alles tussen <td> (al dan niet met aparte attributen) en </td> nemen, en daarna tussen <date> en </date> zetten. Uiteindelijk hou je geen <td>'s meer over. Als dat niet is wat je wil (wat ik me heel goed voor kan stellen 8)7) dan zul je toch echt iets specifieker moeten zijn in je probleemstelling...aan welk patroon moet datgene wat vervangen moet worden voldoen?
Ik reageerde op de post van Maurad3r, dat dat </td> gebruikt word voor andere tags bedoelde ik dat er bijv. ook andere data die een andere XML tag moet krijgen afgesloten word met </td>

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Nu online
timcooijmans schreef op dinsdag 29 maart 2005 @ 18:18:
[...]

Ik reageerde op de post van Maurad3r, dat dat </td> gebruikt word voor andere tags bedoelde ik dat er bijv. ook andere data die een andere XML tag moet krijgen afgesloten word met </td>
Dan is je vraag dus niet "[tekst]no-matter-wat-hier-staat[/tekst] te vervangen naar [andere]no-matter-wat-hier-staat[/andere]" maar eerder om "[tekst]maakt wel uit wat hier staat[/tekst] te vervangen naar [andere]maakt wel uit wat hier staat[/andere]". In normaal Nederlands: je wil alleen de cellen waar een datum in staat vervangen door <date> tags.
Je zult daarvoor een regular expression moeten gebruiken, -NMe- heeft een mooi begin gemaakt. Als je nu een regex tutorial doorneemt dan kun je hem zo aanpassen dat alleen datums worden vervangen:
PHP:
1
2
3
$txt = preg_replace("#<td[^<>]*>(.*?)</td>#iu", '<date>$1</date>', $text);
                                 ^^^ deze groep moet je vervangen door
                                 iets wat matcht aan de inhoud van je cel.

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Als je kennis van XSLT hebt is het daar ook gemakkelijk mee te doen. Maar mischien moet je het maar gewoon bij php houden.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 15:52
Michali schreef op woensdag 30 maart 2005 @ 12:53:
Als je kennis van XSLT hebt is het daar ook gemakkelijk mee te doen. Maar mischien moet je het maar gewoon bij php houden.
Je kunt toch geen (non-wellformed) html omzetten naar xml met xslt?

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Dat is waar ja. Dan zal het wel niet kunnen.

Noushka's Magnificent Dream | Unity

Pagina: 1