Nyt on joku ihme blackoutti taas näissä testauksissa....
XML tiedosto
<Item> <data1></data1> . . . </Item> <Item> <data1></data1> . . . </Item>
<?php $historia = file("testi.xml"); foreach ($historia as $rivi) { echo "$rivi<br>"; if($rivi == " <Item>"){. . . } //<- EI LÖYDÄ TUOTA EKAA RIVIÄ MILLÄÄN } ?>
Eli tarkotus olis saada kiinni tuosta ekasta rivistä jotta tiedän laittaa seuraavia tietueita järjestykseen mutta en millään saa tarrattua tuohon <Item> kohtaan kiinni sitten millään jostain syystä...
Noita xml parsereitakin kokeillu mutta ei mun taidoilla niistä saanu mitään toimimaan tuon kanssa.
Rivin lopussa on rivinvaihtomerkki (\n tai \r\n), joten vertailusi toimii väärin. Kannattaa lisätä tiedoston lukemiseen parametri FILE_IGNORE_NEW_LINES, jotta rivinvaihtomerkit poistetaan. Myös trim-funktiosta voi olla hyötyä, jotta välilyöntien määrällä ei olisi vaikutusta.
XML-parserin käyttöä auttaa validi XML, jollaista ainakaan esimerkkisi ei ole.
joo näinhän se olikin että tuo rivinvaihtomerkki siellä kummitteli tietenki.. ja ei, tuossa alkuperäsessä postissa ei ole xml siinä muodossa kuin se on, vaan havainnolistamassa..
Asiaan tuli kuitenkin toinen kummallisuus kun luen noita rivejä rivi kerrallaan php:llä xml tiedostosta, niin en saa niitä tageja mitenkään pois niistä.
Vaan kun otan sieltä esim sanotaan rivin 5 joka näyttäisi tältä:
<Wholesale_price_eur>52.53</Wholesale_price_eur>
Niin html näyttää sen "52.53", mutta tietokantaan laitettaessa koko rimpsuna.
Yritin tehdä näin ennen tietokantaan viemistä:
str_replace( "<Wholesale_price_eur>", "", $rivi ); str_replace( "</Wholesale_price_eur>", "", $rivi );
Koitin myös strip_tags ominaisuutta tuloksetta.
Mutta se ei poista tageja??
Ihan vain pienenä vinkkinä, purkkaratkaisujen sijasta opettele käyttämään xml-parseria, niin säästyt paljolta mielipahalta.
https://www.php.net/manual/en/simplexml.examples-basic.php tuossa näyttäisi olevan joku helposti ymmärrettävä opas.
Tuossa purkassa auttaa se kun sijoitat str_replacen
:n tuloksen muuttujaan, esim.
$rivi = str_replace( "<Wholesale_price_eur>", "", $rivi );
Mä nyt koitin ymmärtää tuota opasta ja tehdä pienen testin..
<?xml version="1.0" encoding="iso-8859-1"?> <Items> <Item> <Product_id>29350</Product_id> <Code>T2055017</Code> </Item> <Item> <Product_id>44001</Product_id> <Code>K2653518</Code> </Item> </Items>
<?php $xml = simplexml_load_file('full.xml'); $items = new SimpleXMLElement($xml); echo $items->Item[0]->Code; print_r($xml) ?>
Echo ei tuota mitään.
print_r yksistään tuottaa:
SimpleXMLElement Object ( [Item] => Array ( [0] => SimpleXMLElement Object ( [Product_id] => 29350 [Code] => T2055017 ) [1] => SimpleXMLElement Object ( [Product_id] => 44001 [Code] => K2653518 ) ) )
Mikähän jäi nyt huomoimatta? sivuston movies esimerkin saan kyllä toimimaan..
<?php $xml = simplexml_load_file('full.xml'); echo $xml->Item[0]->Code; ?>
Kiitos. Tämmösellä sain nyt sellaseksi kun halusin:
<?xml version="1.0" encoding="iso-8859-1"?> <Items> <Item> <Product_id>29350</Product_id> <Code>T2055017</Code> </Item> <Item> <Product_id>44001</Product_id> <Code>K2653518</Code> </Item> </Items>
<?php $xml = simplexml_load_file('full.xml'); foreach ($xml->Item as $pID) { echo $pID->Product_id; echo $pID->Code; //muuttujiin tai mihin vaan tagi kerrallaan. } ?>
sprawl kirjoitti:
<?xml version="1.0" encoding="iso-8859-1"?>
Kannattaneen vaihtaa merkistö utf-8:ksi, sillä emme elä enää kivikaudella.
Aihe on jo aika vanha, joten et voi enää vastata siihen.