1<?php
2
3/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
4
5/**
6 * Examples (file #1)
7 *
8 * several examples for the methods of XML_Util
9 *
10 * PHP versions 4 and 5
11 *
12 * LICENSE:
13 *
14 * Copyright (c) 2003-2008 Stephan Schmidt <schst@php.net>
15 * All rights reserved.
16 *
17 * Redistribution and use in source and binary forms, with or without
18 * modification, are permitted provided that the following conditions
19 * are met:
20 *
21 *    * Redistributions of source code must retain the above copyright
22 *      notice, this list of conditions and the following disclaimer.
23 *    * Redistributions in binary form must reproduce the above copyright
24 *      notice, this list of conditions and the following disclaimer in the
25 *      documentation and/or other materials provided with the distribution.
26 *    * The name of the author may not be used to endorse or promote products
27 *      derived from this software without specific prior written permission.
28 *
29 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
30 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
31 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
32 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
33 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
34 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
35 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
36 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
37 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
38 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
39 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40 *
41 * @category   XML
42 * @package    XML_Util
43 * @subpackage Examples
44 * @author     Stephan Schmidt <schst@php.net>
45 * @copyright  2003-2008 Stephan Schmidt <schst@php.net>
46 * @license    http://opensource.org/licenses/bsd-license New BSD License
47 * @version    CVS: $Id$
48 * @link       http://pear.php.net/package/XML_Util
49 */
50
51    /**
52     * set error level
53     */
54    error_reporting(E_ALL);
55
56    require_once 'XML/Util.php';
57
58    /**
59     * replacing XML entities
60     */
61    print 'replace XML entities:<br>';
62    print XML_Util::replaceEntities('This string contains < & >.');
63    print "\n<br><br>\n";
64
65    /**
66     * reversing XML entities
67     */
68    print 'replace XML entities:<br>';
69    print XML_Util::reverseEntities('This string contains &lt; &amp; &gt;.');
70    print "\n<br><br>\n";
71
72    /**
73     * building XML declaration
74     */
75    print 'building XML declaration:<br>';
76    print htmlspecialchars(XML_Util::getXMLDeclaration());
77    print "\n<br><br>\n";
78
79    print 'building XML declaration with additional attributes:<br>';
80    print htmlspecialchars(XML_Util::getXMLDeclaration('1.0', 'UTF-8', true));
81    print "\n<br><br>\n";
82
83    /**
84     * building document type declaration
85     */
86    print 'building DocType declaration:<br>';
87    print htmlspecialchars(XML_Util::getDocTypeDeclaration('package',
88        'http://pear.php.net/dtd/package-1.0'));
89    print "\n<br><br>\n";
90
91    print 'building DocType declaration with public ID (does not exist):<br>';
92    print htmlspecialchars(XML_Util::getDocTypeDeclaration('package',
93        array('uri' => 'http://pear.php.net/dtd/package-1.0',
94            'id' => '-//PHP//PEAR/DTD PACKAGE 0.1')));
95    print "\n<br><br>\n";
96
97    print 'building DocType declaration with internal DTD:<br>';
98    print '<pre>';
99    print htmlspecialchars(XML_Util::getDocTypeDeclaration('package',
100        'http://pear.php.net/dtd/package-1.0',
101        '<!ELEMENT additionalInfo (#PCDATA)>'));
102    print '</pre>';
103    print "\n<br><br>\n";
104
105    /**
106     * creating an attribute string
107     */
108    $att = array(
109        'foo'  => 'bar',
110        'argh' => 'tomato'
111    );
112
113    print 'converting array to string:<br>';
114    print XML_Util::attributesToString($att);
115    print "\n<br><br>\n";
116
117
118    /**
119     * creating an attribute string with linebreaks
120     */
121    $att = array(
122        'foo'  => 'bar',
123        'argh' => 'tomato'
124    );
125
126    print 'converting array to string (including line breaks):<br>';
127    print '<pre>';
128    print XML_Util::attributesToString($att, true, true);
129    print '</pre>';
130    print "\n<br><br>\n";
131
132
133    /**
134     * splitting a qualified tag name
135     */
136    print 'splitting qualified tag name:<br>';
137    print '<pre>';
138    print_r(XML_Util::splitQualifiedName('xslt:stylesheet'));
139    print '</pre>';
140    print "\n<br>\n";
141
142
143    /**
144     * splitting a qualified tag name (no namespace)
145     */
146    print 'splitting qualified tag name (no namespace):<br>';
147    print '<pre>';
148    print_r(XML_Util::splitQualifiedName('foo'));
149    print '</pre>';
150    print "\n<br>\n";
151
152    /**
153     * splitting a qualified tag name (no namespace, but default namespace specified)
154     */
155    print 'splitting qualified tag name '
156        . '(no namespace, but default namespace specified):<br>';
157    print '<pre>';
158    print_r(XML_Util::splitQualifiedName('foo', 'bar'));
159    print '</pre>';
160    print "\n<br>\n";
161
162    /**
163     * verifying XML names
164     */
165    print 'verifying \'My private tag\':<br>';
166    print '<pre>';
167    print_r(XML_Util::isValidname('My Private Tag'));
168    print '</pre>';
169    print "\n<br><br>\n";
170
171    print 'verifying \'-MyTag\':<br>';
172    print '<pre>';
173    print_r(XML_Util::isValidname('-MyTag'));
174    print '</pre>';
175    print "\n<br><br>\n";
176
177    /**
178     * creating an XML tag
179     */
180    $tag = array(
181        'namespace'  => 'foo',
182        'localPart'  => 'bar',
183        'attributes' => array('key' => 'value', 'argh' => 'fruit&vegetable'),
184        'content'    => 'I\'m inside the tag'
185    );
186
187    print 'creating a tag with namespace and local part:<br>';
188    print htmlentities(XML_Util::createTagFromArray($tag));
189    print "\n<br><br>\n";
190
191    /**
192     * creating an XML tag
193     */
194    $tag = array(
195        'qname'        => 'foo:bar',
196        'namespaceUri' => 'http://foo.com',
197        'attributes'   => array('key' => 'value', 'argh' => 'fruit&vegetable'),
198        'content'      => 'I\'m inside the tag'
199    );
200
201    print 'creating a tag with qualified name and namespaceUri:<br>';
202    print htmlentities(XML_Util::createTagFromArray($tag));
203    print "\n<br><br>\n";
204
205    /**
206     * creating an XML tag
207     */
208    $tag = array(
209        'qname'        => 'bar',
210        'namespaceUri' => 'http://foo.com',
211        'attributes'   => array('key' => 'value', 'argh' => 'fruit&vegetable')
212    );
213
214    print 'creating an empty tag without namespace but namespace Uri:<br>';
215    print htmlentities(XML_Util::createTagFromArray($tag));
216    print "\n<br><br>\n";
217
218    /**
219     * creating an XML tag with more namespaces
220     */
221    $tag = array(
222        'namespace'   => 'foo',
223        'localPart'   => 'bar',
224        'attributes'  => array('key' => 'value', 'argh' => 'fruit&vegetable'),
225        'content'     => 'I\'m inside the tag',
226        'namespaces'  => array(
227            'bar'  => 'http://bar.com',
228            'pear' => 'http://pear.php.net',
229        )
230    );
231
232    print 'creating an XML tag with more namespaces:<br />';
233    print htmlentities(XML_Util::createTagFromArray($tag));
234    print "\n<br><br>\n";
235
236    /**
237     * creating an XML tag with a CData Section
238     */
239    $tag = array(
240        'qname'      => 'foo',
241        'attributes' => array('key' => 'value', 'argh' => 'fruit&vegetable'),
242        'content'    => 'I\'m inside the tag'
243    );
244
245    print 'creating a tag with CData section:<br>';
246    print htmlentities(XML_Util::createTagFromArray($tag, XML_UTIL_CDATA_SECTION));
247    print "\n<br><br>\n";
248
249    /**
250     * creating an XML tag with a CData Section
251     */
252    $tag = array(
253        'qname'      => 'foo',
254        'attributes' => array('key' => 'value', 'argh' => 't�t�'),
255        'content'    =>
256            'Also XHTML-tags can be created '
257            . 'and HTML entities can be replaced � � � � <>.'
258    );
259
260    print 'creating a tag with HTML entities:<br>';
261    print htmlentities(XML_Util::createTagFromArray($tag, XML_UTIL_ENTITIES_HTML));
262    print "\n<br><br>\n";
263
264    /**
265    * creating an XML tag with createTag
266    */
267    print 'creating a tag with createTag:<br>';
268    print htmlentities(XML_Util::createTag('myNs:myTag',
269        array('foo' => 'bar'),
270        'This is inside the tag',
271        'http://www.w3c.org/myNs#'));
272    print "\n<br><br>\n";
273
274
275    /**
276     * trying to create an XML tag with an array as content
277     */
278    $tag = array(
279        'qname'   => 'bar',
280        'content' => array('foo' => 'bar')
281    );
282    print 'trying to create an XML tag with an array as content:<br>';
283    print '<pre>';
284    print_r(XML_Util::createTagFromArray($tag));
285    print '</pre>';
286    print "\n<br><br>\n";
287
288    /**
289     * trying to create an XML tag without a name
290     */
291    $tag = array(
292        'attributes' => array('foo' => 'bar'),
293    );
294    print 'trying to create an XML tag without a name:<br>';
295    print '<pre>';
296    print_r(XML_Util::createTagFromArray($tag));
297    print '</pre>';
298    print "\n<br><br>\n";
299?>
300