REG.EXP: Hente det mellem <url>..</url>

Tags:    php

<< < 123 > >>
Hej,
Jeg har en XML fil fra filmtrailer, hvor jeg ønsker at hente det mellem <url> og </url>.

Fold kodeboks ind/udKode 


Den SKAL vide, at det er mellem <file ......></file> også, fordi der findes andre <url> i xml-dokumentet, som ses her:

http://dk.feed.playnw.com/v2.0/?ListType=Latest30InCinema&channel_user_id=100001

Håber nogle kan hjælpe



brug xpath til xml, regex til tekst strenge

xpath = "file/url"

/J



/playnetworks/movies[@movie_id = 'XX']/movie/regions/region/products/product/clips/clip/files/file/url

Den præcise fra xml kilden, erstat XX til den film du vil ha'


/J



Tror du har mistforstået spørgsmålet - det er PHP, og jeg benytter preg_match_all(), som alle de andre parser jeg har lavet - så jeg vil ikke gå over til noget nyt

Kan det klares med preg_match_all(..) ?



Du misforstår opgaven... lidt som at banke søm i aluminium med en tandbørste.


Xml kan godt behandles som en tekststreng og behandles med reg.ex, men det er uhensigsmæssigt. Xml kan behandles som et XML ark.

Se: http://www.w3schools.com/php/func_simplexml_xpath.asp

Hvis du ikke vil benytte andre teknikker end dem du kender, - Så er reg ex vejen frem, men som du selv er inde på er det utroligt svært at udtrykke sig, og hvorfor skulle man når xpath er skræddersyet dertil.

/J



Indlæg senest redigeret d. 10.02.2009 16:03 af Bruger #5789
du kan så ikke hjælpe mig med preg_match_all funktionen til dette?






Nej jeg kan ikke udtrykke sådan noget gennem Reg ex. - Jeg bruger reg ex til at behandle strenge :)

Men jeg vil skyde på du skal finde alle match af <url>, med ".flv" i sig. Og ikke tænkte på at det skal være en <file> parent, hvis du forstår. Altså glemme det er xml, men kun lede efter tekst.

<(?<url>.*).*>(?<text>.*)</\k<url>>

Dem tager alle, $2 skulle gerne være indholdet

...men du har jo ingen ide eller anelse om hvilken rækkefølge eller noget de kommer i. og til hvilke noder de passer med, altså dit data grundlag bliver noget værre rod, hvis du ikke iterere gennem noder men søger på en lang tekst streng.

/J



.. Det tager mig 18ms med MSXML 4.0 xpath at finde alle <url> med <file format="flv" size="medium">, bare til reference... Source er det xml du linker til.

Samtidigt, kan jeg let gå tilbage og se hvilken film de tilhører mm.


Den her timer ud : http://regexlib.com/RETester.aspx men det kan bare være pga den 300kb store streng.

/J



Indlæg senest redigeret d. 10.02.2009 17:03 af Bruger #5789
Tak.

Min kode ser sådan her ud pt.

Fold kodeboks ind/udKode 


Der er i alt 30 film i det XML dokument, hvordan kan jeg udtrække hver trailer-url i min for-løkke? Gider du komme med et simpelt kodeeksempel, så ville det være alletiders.

TAK!



preg_match_all("|<file.*?<url>(.*?)<\/url><\/file>|", $k, $Trailer);

Skal jo kun tage de <files> der ligger i den gældende <movie>..

JEg er ikke skide hård til php, men du skal i din forløkke

for ( $i=0;$i<count($Title[1]);$i++)
{

få fat i den gælende movies xml, og udfra den tage at fyre det regex af, så du kun tager fra den film du er nået til i løkken, og ikke alle.

Som sagt behandler du dataen lidt forkert, der er ingen relationer.

Sig til hvis jeg skal lave transformeringen i xslt.

/J



Mærkeligt. Den udskriver stadig:

Array
(
[0] => Array
(
)

[1] => Array
(
)

)

ved print_r($Trailer)

Transformering i xslt? Hvis du kan lave det så alt fungerer korrekt, så ville det da være super dejligt. Tak



<< < 123 > >>
t