ik heb een veld in een xml feed waar de volgende info instaat
<description>Start Van De Motor Set USB ID: 6F22683C19 Time: 30-10-2020 21:18:40 CET Engine Hours: 3083:27:00 </description>
nou wil ik het in de volgende stukken delen
tot aan Set USB (dit kan variable zijn)
gedeelte van SET USB tot aan Time
Gedeelte Time tot aan Engine
engine gedeelte
nou heb ik al geprobeerd dit met de volgende code te doen
$test01 = $item->description;
$result = explode("SET", $test01);
$result2 = explode("Time:", $test01);
$result3 = explode("Engine", $test01);
Maar dan krijg ik lege array's
waarschijnlijk gebruik ik ook niet de goede functie hiervoor maar zou niet weten welke ik het beste ervoor kan gebruiken
<?php
$value = 'Start Van De Motor Set USB ID: 6F22683C19 Time: 30-10-2020 21:18:40 CET Engine Hours: 3083:27:00';
if(preg_match('/^(.*) Set USB (.*) Time: (.*) Engine (.*)$/',$value,$match)){
print_r($match);
/*
$match[1] => Start Van De Motor
$match[2] => ID: 6F22683C19
$match[3] => 30-10-2020 21:18:40 CET
$match[4] => Hours: 3083:27:00
*/
}
?>
Voel me toch genoodzaakt om op te merken dat het hier een XML-feed betreft, en dan wordt alle data ongestructureerd in een enkel element geplempt. Dan heb je toch niet helemaal begrepen waar XML voor bedoeld is :s.
Zelfs als het een description betreft, hierin staan allerhande specs die blijkbaar relevant zijn. Dat rechtvaardigt dan toch enige structuur. En als de spec van dit XML-document dan zodanig is dat je hier geen aparte velden voor in kunt voegen, dan kun je toch op zijn minst zorgen voor enige structuur in deze data? :/
De oplossing van @Rob zal overigens alleen werken als alle descriptions dit (precieze) format hebben.
Als het format redelijk vast is, maar de variatie "SET" / "Set" geen schrijffout was, dan kun je dit nog opvangen door de regex hoofdletter ongevoelig te maken door er een "i" achter te zetten.
preg_match('/^(.*) Set USB (.*) Time: (.*) Engine (.*)$/i',$value,$match)
Ook kleine variaties kun je nog wel opvangen (door ze optioneel te maken in de regex - door er een vraagteken achter te zetten; en zo zijn er nog wel meer mogelijkheden), maar dan wordt het langzamerhand wel een beetje "voodoo". Dan kun je inderdaad beter gaan kijken of je de data niet gewoon gestructureerder aangeleverd kunt krijgen (als je daar al invloed op hebt).
Deze xml bestand haal ik op van een server van een leverancier.. dus heb hier geen invloed op...
ik wil alleen de data hebben zodat ik wat meer met de data kan doen.
maar je hebt helemaal gelijk de structuur is niet zoals het hoort, maar daarom wilde ik ook de data eruit kunnen filteren.
Thomas van den Heuvel op 31/10/2020 13:18:43
Voel me toch genoodzaakt om op te merken dat het hier een XML-feed betreft, en dan wordt alle data ongestructureerd in een enkel element geplempt. Dan heb je toch niet helemaal begrepen waar XML voor bedoeld is :s.
Zelfs als het een description betreft, hierin staan allerhande specs die blijkbaar relevant zijn. Dat rechtvaardigt dan toch enige structuur. En als de spec van dit XML-document dan zodanig is dat je hier geen aparte velden voor in kunt voegen, dan kun je toch op zijn minst zorgen voor enige structuur in deze data? :/
De oplossing van @Rob zal overigens alleen werken als alle descriptions dit (precieze) format hebben.
[size=xsmall]Toevoeging op 01/11/2020 13:22:41:[/size]
Rob Doemaarwat op 30/10/2020 23:40:10
Ik zou dit met een regular expression doen:
<?php
$value = 'Start Van De Motor Set USB ID: 6F22683C19 Time: 30-10-2020 21:18:40 CET Engine Hours: 3083:27:00';
if(preg_match('/^(.*) Set USB (.*) Time: (.*) Engine (.*)$/',$value,$match)){
print_r($match);
/*
$match[1] => Start Van De Motor
$match[2] => ID: 6F22683C19
$match[3] => 30-10-2020 21:18:40 CET
$match[4] => Hours: 3083:27:00
*/
}
?>
ik krijg het niet helemaal voor elkaar
ik heb nu $test = (preg_match('/^(.*) Set USB (.*) Time: (.*) Engine (.*)$/',$item->description,$match));
// alleen om te testen
print_r($test);
print_r($match);
$test1 = $match[1];
$test2 = $match[2];
$test3 = $match[3];
$test4 = $match[4];
maar de array blijft leeg terwijl $item->description wel goed is.
Ik neem aan dat je met "de array blijft leeg" de $match bedoelt? Geef eens een exacte dump van $item->description (en voor de zekerheid toch ook maar van $match).
https://www.site.com/user_rss_feed.php dit is de link die ik ophaal alleen moet je inloggen om het te zien dus zie user_rss_feed.php.xml voor wat ik op het scherm krijg.
@Adoptive Solution deze code werkt goed maar niet als ik de link erin verwerk dan krijg ik +
Warning: simplexml_load_string(): Entity: line 1: parser error : Start tag expected, '<' not found in /httpdocs/power/feed.php on line 49
@Michael mogelijk komt dat omdat het codeblok hierboven foutief een [code] tag invoegt op regel 3. Als je deze verwijdert lijkt het wel/beter te werken.
@Michael mogelijk komt dat omdat het codeblok hierboven foutief een [code] tag invoegt op regel 3. Als je deze verwijdert lijkt het wel/beter te werken.
die had ik netjes verwijderd..
ik denk dat het komt omdat het een .php bestand is die ik ophaal die een xml output ?