0% found this document useful (0 votes)
48 views33 pages

XML and PHP

The document discusses using PHP to work with XML files. It covers reading and writing XML files using PHP, using different types of XML parsers like SimpleXML and DOM, manipulating XML data by adding/removing nodes, and getting values from XML nodes and their attributes. Tree-based parsers like SimpleXML are introduced as holding the entire XML document in memory, while event-based parsers stream through the file without loading it entirely into memory.

Uploaded by

splokbov
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
Download as pdf or txt
0% found this document useful (0 votes)
48 views33 pages

XML and PHP

The document discusses using PHP to work with XML files. It covers reading and writing XML files using PHP, using different types of XML parsers like SimpleXML and DOM, manipulating XML data by adding/removing nodes, and getting values from XML nodes and their attributes. Tree-based parsers like SimpleXML are introduced as holding the entire XML document in memory, while event-based parsers stream through the file without loading it entirely into memory.

Uploaded by

splokbov
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
Download as pdf or txt
Download as pdf or txt
You are on page 1/ 33

Week 9 – XML and PHP

Internet Technologies and Web


Services
Aims of the lecture
• At the end of today’s lecture students should
be able to
– Read an XML file saved on server
– Write php code to manipulate xml files
XML file
• Consider the following file which is saved on
server as note.xml:
<?xml version="1.0" encoding="UTF-8"?>
<note>
<from>Jani</from>
<to>Tove</to>
<message>Remember me this
weekend</message>
</note>
Generating XML using PHP code
• The following code generates the above the xml file
using php:
<?php
header("Content-type: text/xml");
echo "<?xml version='1.0' encoding='UTF-8'?>";
echo "<note>";
echo "<from>Jani</from>";
echo "<to>Tove</to>";
echo "<message>Remember me this
weekend</message>";
echo "</note>";
?>
XML Parsers
• To read and update, create and manipulate an
XML document, you will need an XML parser.
• In PHP there are two major types of XML
parsers:
– Tree-Based Parsers
– Event-Based Parsers
Tree-based parsers
• Tree-based parsers holds the entire document in
Memory and transforms the XML document into
a Tree structure. It analyzes the whole document,
and provides access to the Tree elements (DOM).
• This type of parser is a better option for smaller
XML documents, but not for large XML document
as it causes major performance issues.
• Example of tree-based parsers:
– SimpleXML
– DOM
Event-based parsers
• Event-based parsers do not hold the entire
document in Memory, instead, they read in one
node at a time and allow you to interact with in
real time. Once you move onto the next node,
the old one is thrown away.
• This type of parser is well suited for large XML
documents. It parses faster and consumes less
memory.
• Example of event-based parsers:
– XMLReader
– XML Expat Parser
PHP SimpleXML Parser
• SimpleXML is a PHP extension that allows us to easily
manipulate and get XML data.
• SimpleXML is a tree-based parser.
• SimpleXML provides an easy way of getting an
element's name, attributes and textual content if you
know the XML document's structure or layout.
• SimpleXML turns an XML document into a data
structure you can iterate through like a collection of
arrays and objects.
• Compared to DOM or the Expat parser, SimpleXML
takes a fewer lines of code to read text data from an
element.
Installation
• As of PHP 5, the SimpleXML functions are part
of the PHP core.
• No installation is required to use these
functions.
PHP SimpleXML - Read From String
• The PHP simplexml_load_string() function is used
to read XML data from a string.
• $myXMLData =
"<?xml version='1.0' encoding='UTF-8'?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>";
Simple_xml_load()
• The example below shows how to use the simplexml_load_string()
function to read XML data from a string:
• <?php
$myXMLData =
"<?xml version='1.0' encoding='UTF-8'?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>";
$xml=simplexml_load_string($myXMLData) or die("Error: Cannot
create object");
print_r($xml);
?>
Output
• SimpleXMLElement Object ( [to] => Tove
[from] => Jani [heading] => Reminder [body]
=> Don't forget me this weekend! )
Error Handling
• Use the libxml functionality to retrieve all XML
errors when loading the document and then
iterate over the errors.
Example: Trying to load a broken XML
string
• <?php
libxml_use_internal_errors(true);
$myXMLData =
"<?xml version='1.0' encoding='UTF-8'?>
<document>
<user>John Doe</wronguser>
<email>john@example.com</wrongemail>
</document>";
$xml = simplexml_load_string($myXMLData);
if ($xml === false) {
echo "Failed loading XML: ";
foreach(libxml_get_errors() as $error) {
echo "<br>", $error->message;
}
} else {
print_r($xml);
}
?>
Output produced
• Failed loading XML:
Opening and ending tag mismatch: user line 3
and wronguser
Opening and ending tag mismatch: email line
4 and wrongemail
PHP SimpleXML - Read From File
• The PHP simplexml_load_file() function is
used to read XML data from a file.
• <?php
$xml=simplexml_load_file("note.xml") or
die("Error: Cannot create object");
print_r($xml);
?>
Output produced
• SimpleXMLElement Object ( [to] => Tove
[from] => Jani [heading] => Reminder [body]
=> Don't forget me this weekend! )
PHP SimpleXML - Get Node Values
• <?php
$xml=simplexml_load_file("note.xml") or
die("Error: Cannot create object");
echo $xml->to . "<br>";
echo $xml->from . "<br>";
echo $xml->heading . "<br>";
echo $xml->body;
?>
Output
• Tove
Jani
Reminder
Don't forget me this weekend!
Books.xml
• <?xml version="1.0" encoding="utf-8"?>
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en-us">XQuery Kick Start</title>
<author>James McGovern</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="WEB">
<title lang="en-us">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
PHP SimpleXML - Get Node Values of
Specific Elements
• <?php
$xml=simplexml_load_file("books.xml") or
die("Error: Cannot create object");
echo $xml->book[0]->title . "<br>";
echo $xml->book[1]->title;
?>
Output
• Everyday Italian
Harry Potter
PHP SimpleXML - Get Node Values -
Loop
• The following example loops through all the <book>
elements in the "books.xml" file, and gets the node values
of the <title>, <author>, <year>, and <price> elements:
• <?php
$xml=simplexml_load_file("books.xml") or die("Error:
Cannot create object");
foreach($xml->children() as $books) {
echo $books->title . ", ";
echo $books->author . ", ";
echo $books->year . ", ";
echo $books->price . "<br>";
}
?>
Output
• Everyday Italian, Giada De Laurentiis, 2005,
30.00
Harry Potter, J K. Rowling, 2005, 29.99
XQuery Kick Start, James McGovern, 2003,
49.99
Learning XML, Erik T. Ray, 2003, 39.95
PHP SimpleXML - Get Attribute Values
• The following example gets the attribute value of
the "category" attribute of the first <book>
element and the attribute value of the "lang"
attribute of the <title> element in the second
<book> element:
• <?php
$xml=simplexml_load_file("books.xml") or
die("Error: Cannot create object");
echo $xml->book[0]['category'] . "<br>";
echo $xml->book[1]->title['lang'];
?>
Output
• COOKING
en
PHP SimpleXML - Get Attribute Values
- Loop
• The following example gets the attribute values
of the <title> elements in the "books.xml" file:
• <?php
$xml=simplexml_load_file("books.xml") or
die("Error: Cannot create object");
foreach($xml->children() as $books) {
echo $books->title['lang'];
echo "<br>";
}
?>
Output
• en
en
en-us
en-us
Adding a new child
• Add a child element to the <body> element and a new <footer> element:
• <?php
$note=<<<XML
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
XML;
$xml = new SimpleXMLElement($note);
// Add a child element to the body element
$xml->body->addChild("date","2014-01-01");
// Add a child element after the last element inside note
$footer = $xml->addChild("footer","Some footer text");
echo $xml->asXML();
?>
Output
Tove Jani Reminder Don't forget me this
weekend!2014-01-01
Some footer text
Example: count()
• <?php
$xml=<<<XML
<cars>
<car name="Volvo">
<child/>
<child/>
<child/>
<child/>
</car>
<car name="BMW">
<child/>
<child/>
</car>
</cars>
XML;
$elem=new SimpleXMLElement($xml);
foreach ($elem as $car)
{
printf("%s has %d children.<br>", $car['name'], $car->count());
}
?>
Output
• Volvo has 4 children.
BMW has 2 children.
References
• Examples come from:
http://www.w3schools.com/

You might also like