Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: XML-tiedoston lukeminen

Sivun loppuun

sprawl [02.04.2017 20:59:43]

#

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.

Metabolix [02.04.2017 21:19:06]

#

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.

sprawl [03.04.2017 21:37:26]

#

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??

kalppi [03.04.2017 22:34:44]

#

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 );

sprawl [04.04.2017 08:03:49]

#

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..

kalppi [04.04.2017 13:11:58]

#

<?php
$xml = simplexml_load_file('full.xml');
echo $xml->Item[0]->Code;
 ?>

sprawl [04.04.2017 13:55:27]

#

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.

}

 ?>

peran [04.04.2017 16:07:23]

#

sprawl kirjoitti:

<?xml version="1.0" encoding="iso-8859-1"?>

Kannattaneen vaihtaa merkistö utf-8:ksi, sillä emme elä enää kivikaudella.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta