Trill Designs: Php And Xml - Trill Designs

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Php And Xml

#1 User is offline   Jaan Icon

  • Site Admin
  • Icon
  • Group: Administrators
  • Posts: 84
  • Joined: 23-November 09
  • LocationEstonia

Posted 25 January 2010 - 09:24 PM

Hey!

I was thinking about writing a new tutorial for you. So here it is.

I'm going to show you what you can do with SimpleXML in PHP and how to get info from XML file.

Okay this is our XML file.

users.xml

<?xml version="1.0" encoding="UTF-8"?>
<users>
    <user id="1">
        <username>Jaan</username>
        <age>18</age>
        <gender>male</gender>
        <location>Estonia</location>
    </user>
    <user id="2">
        <username>Mike777</username>
        <age>25</age>
        <gender>male</gender>
        <location>United States</location>
    </user>
    <user id="3">
        <username>DingoNKangarooLove</username>
        <age>12</age>
        <gender>female</gender>
        <location>Australia</location>
    </user>
    <user id="4">
        <username>TingTongPingPong</username>
        <age>36</age>
        <gender>male</gender>
        <location>China</location>
    </user>
</users>


Hm.. Boss told you to list all users. Okay it goes like this:

<?php

$xml = simplexml_load_file("users.xml");

$count = count($xml->user)-1;

for($i=0;$i<=$count;$i++){
    
    echo $xml->user[$i]->username."<br />";
    
}

?>


And it prints this:

Quote

Jaan
Mike777
DingoNKangarooLove
TingTongPingPong


Eee.. okay it prints this but what did you wrote??!!1

Ok.. it worked like this:

$xml = simplexml_load_file("users.xml");
This loads our XML file to $xml variable

$count = count($xml->user)-1;
This counts how many users we have in this file.
It counts <user> tags. This "-1" is there because counting tags in XML file stats from 0.

for($i=0;$i<=$count;$i++){
Now let's go for a loop. It loops it just as many times how many users are in XML file.

echo $xml->user[$i]->username."<br />";
Let's show our users.
First <user> tag is 1, second <user> tag is 2 and so on. Now in loop we are taking those <user> tags like this user[$i] whitch is like user['1'], user['2'].

Oh yea.. it works but now your Boss told you to get user from XML database and print user with all information.

Hm.. ok it goes like this:

<?php

$xml = simplexml_load_file("users.xml");

$count = count($xml->user)-1;

for($i=0;$i<=$count;$i++){
    
    echo "Username: ".$xml->user[$i]->username."<br />"
        ."Age: ".$xml->user[$i]->age."<br />"
        ."Gender: ".$xml->user[$i]->gender."<br />"
        ."Location: ".$xml->user[$i]->location."<br /><br />";
    
}

?>


It works just like the first script but it just have more information.
It works like this:

[1]    [2]         [3]
$xml->user[$i]->username;


[1] XML file
[2] Container tag (For us it's <user>)
[3] Information tag (We have <username>, <age>, <gender> and <location>)

Now Boss is happy but he wants to get information about users dynamically by IDs. And he wants to take information like this from url: http://company.com/d...p?id={id_here}.

Posted Image

Hm.. okay it works like this:

<?php

$xml = simplexml_load_file("users.xml");

$id = $_GET['id'];
$num = $id-1;

foreach($xml->children() as $info){
    
    if($info['id'] == $id){
        
        echo "Username: ".$xml->user[$num]->username."<br />"
            ."Age: ".$xml->user[$num]->age."<br />"
            ."Gender: ".$xml->user[$num]->gender."<br />"
            ."Location: ".$xml->user[$num]->location;
        
    }
    
}

?>


Eee.. explain?
Ok.. it goes like this:

$xml = simplexml_load_file("users.xml");
Load XML file

$id = $_GET['id'];
Get ID from URL

$num = $id-1;
Let's calculate our <user> location

foreach($xml->children() as $info){
Well our user tag looks like this: <user id="2"> and this $xml->children() creates an array of those id="2" things.

if($info['id'] == $id){
Now let's get that id="2" and if id IS for example 2 then let's display user's info.

echo "Username: ".$xml->user[$num]->username."<br />"
This works just like I explained before. It takes <user> tags location and displays it's <username>.

."Age: ".$xml->user[$num]->age."<br />"
."Gender: ".$xml->user[$num]->gender."<br />"
."Location: ".$xml->user[$num]->location;
These things work just like username.

}
This closes if

}
And this closes foreach

Well.. This is it. Your boss is now happy and you are happy because you learned to use XML files as a "database" and how to take info from that "database".

If you have questions just ask, don't be afraid ;)

Regards,
Jaan
0

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users