pear中几个实用的xml代码库

时间:2022-04-06 07:17:38

1.XML_Beautifier

用于将一段排版凌乱的XML文档美化

 1 <?php 
2 require_once "XML/Beautifier.php";
3 $fmt = new XML_Beautifier();
4 $result = $fmt->formatFile('originalFile.xml', 'beautifiedFile.xml');
5 if (PEAR::isError($result)) {
6 echo $result->getMessage();
7 exit();
8 }
9 echo "File beautified, awaiting orders!<br />";
10 ?>

 

2.XML_DTD

引用外部的dtd文件以对xml内容进行验证

1 <?php 
2 require_once 'XML/DTD/XmlValidator.php';
3 $dtd_file = realpath('myfile.dtd');
4 $xml_file = realpath('myfile.xml');
5 $validator = new XML_DTD_XmlValidator();
6 if (!$validator->isValid($dtd_file, $xml_file)) {
7 die($validator->getMessage());
8 }
9 ?>

3.XML_Feed_Parser

解析各种主流格式的Feed(xml,atom,rss1,rss2等格式)

 1 <?php 
2 /* The file you wish to parse */
3 $source = 'my_source.xml';
4 /* Where Relax NG is available, we can force validation of the feed */
5 $validate = true;
6 /* Whether or not to suppress non-fatal warnings */
7 $suppress_warnings = false;
8 /* If the feed is not valid XML and the tidy extension is installed we can * attempt to use it to fix the feed */
9 $use_tidy = true;
10 $feed = new XML_Feed_Parser($source, $validate, $suppress_warnings, $use_tidy);
11 foreach ($feed as $entry) {
12 print $entry->title . "\n";
13 }
14 $first_entry = $feed->getEntryByOffset(0);
15 $particular_entry = $feed->getEntryById('http://jystewart.net/entry/1');
16 ?>

 

4.XML_Parser

SAX模型的 XML 解析器,相对于DOM解析器在解析时需要将这个xml树加载到内存中,SAX在某些应用中表现的更加轻量级。

 1 <?php 
2 require_once 'XML/Parser.php';
3 class myParser extends XML_Parser {
4 function myParser() {
5 parent::XML_Parser();
6 }
7 /** * 处理起始标签 * * @access private * @param resource xml parser 句柄 * @param string 标签名 * @param array 属性值 */
8 function startHandler($xp, $name, $attribs) {
9 printf('handle start tag: %s<br />', $name);
10 }
11 /** * 处理结束标签 * * @access private * @param resource xml parser 句柄 * @param string 标签名 */
12 function endHandler($xp, $name) {
13 printf('handle end tag: %s<br />', $name);
14 }
15 /** * 处理字符数据 * * @access private * @param resource xml parser 句柄 * @param string 字符数据 */
16 function cdataHandler($xp, $cdata) {
17 // does nothing here, but might e.g. print $cdata
18 }
19 }
20
21 $p = &new myParser();
22 $result = $p->setInputFile('xml_parser_file.xml');
23 $result = $p->parse();
24 ?>

 

5.XML_Query2XML

实用query语句直接从数据库中调取数据并转换成XML(支持PDO, PEAR MDB2, PEAR DB, ADOdb)

 1 <?php
2 require_once 'XML/Query2XML.php';
3 $pdo = new PDO('mysql://root@localhost/Query2XML_Tests');
4 $query2xml = XML_Query2XML::factory($pdo);
5 $artistid = $_REQUEST['artistid'];
6 $dom = $query2xml->getXML(
7 array(
8 'data' => array(
9 ":$artistid"
10 ),
11 'query' => 'SELECT * FROM artist WHERE artistid = ?'
12 ),
13 array(
14 'rootTag' => 'favorite_artist',
15 'idColumn' => 'artistid',
16 'rowTag' => 'artist',
17 'elements' => array(
18 'name',
19 'birth_year',
20 'music_genre' => 'genre'
21 )
22 )
23 );
24 header('Content-Type: application/xml');
25 $dom->formatOutput = true;
26 print $dom->saveXML();
27 ?>

 

6.XML_RDDL

读取资源目录描述语言(Resource Directory Description Language,RDDL)

 1 <?php
2 require_once "XML/RDDL.php";
3
4 // create new RDDL parser
5 $rddl = &new XML_RDDL();
6
7 // parse a document that contains RDDL resources
8 $result = $rddl->parseRDDL('http://www.rddl.org');
9 // check for error
10 if (PEAR::isError($result)) {
11 echo sprintf( "ERROR: %s (code %d)", $result->getMessage(), $result->getCode());
12 exit;
13 }
14
15 // get all resources
16 $resources = $rddl->getAllResources();
17 echo "<pre>";
18 print_r($resources);
19 echo "</pre>";
20
21 // get one resource by its Id
22 $test = $rddl->getResourceById('CSS');
23 echo "<pre>";
24 print_r($test);
25 echo "</pre>";
26
27 // get all stylesheets
28 $test = $rddl->getResourcesByNature('http://www.w3.org/1999/XSL/Transform');
29 echo "<pre>";
30 print_r($test);
31 echo "</pre>";
32
33 // get all normative references
34 $test = $rddl->getResourcesByPurpose('http://www.rddl.org/purposes#normative-reference');
35 echo "<pre>";
36 print_r($test);
37 echo "</pre>";
38 ?>

 

7.XML_RSS

RSS解析器

 1 <?php
2 require_once "XML/RSS.php";
3
4 $rss =& new XML_RSS("http://rss.slashdot.org/Slashdot/slashdot");
5 $rss->parse();
6
7 echo "<h1>Headlines from <a href=\"http://slashdot.org\">Slashdot</a></h1>\n";
8 echo "<ul>\n";
9
10 foreach ($rss->getItems() as $item) {
11 echo "<li><a href=\"" . $item['link'] . "\">" . $item['title'] . "</a></li>\n";
12 }
13
14 echo "</ul>\n";
15 ?>

8.XML_Serializer

XML生成器

 1 <?php
2 require_once 'XML/Serializer.php';
3
4 $options = array(
5 "indent" => " ",
6 "linebreak" => "\n",
7 "typeHints" => false,
8 "addDecl" => true,
9 "encoding" => "UTF-8",
10 "rootName" => "rdf:RDF",
11 "defaultTagName" => "item"
12 );
13
14 $stories[] = array(
15 'title' => 'First Article',
16 'link' => 'http://freedomink.org/node/view/55',
17 'description' => 'Short blurb about article........'
18 );
19
20 $stories[] = array(
21 'title' => 'Second Article',
22 'link' => 'http://freedomink.org/node/view/11',
23 'description' => 'This article shows you how ......'
24 );
25
26 $data['channel'] = array(
27 "title" => "Freedom Ink",
28 "link" => "http://freedomink.org/",
29 $stories
30 );
31
32 $serializer = new XML_Serializer($options);
33
34 if ($serializer->serialize($data)) {
35 header('Content-type: text/xml');
36 echo $serializer->getSerializedData();
37 }
38 ?>

 

9.XML_sql2xml

通过sql语句直接从数据库中调取数据转化成xml

1 <?php
2 require_once "XML/sql2xml.php";
3 $sql2xmlclass = new xml_sql2xml("mysql://username:password@localhost/xmltest");
4 $xmlstring = $sql2xmlclass->getxml("select * from bands");
5 ?>

10.XML_Statistics

XML数据统计,标签个数,结构深度等,相当好用

 1 <?php
2 require_once "XML/Statistics.php";
3 $stat = new XML_Statistics(array("ignoreWhitespace" => true));
4 $result = $stat->analyzeFile("example.xml");
5
6 if ($stat->isError($result)) {
7 die("Error: " . $result->getMessage());
8 }
9
10 // total amount of tags:
11 echo "Total tags: " . $stat->countTag() . "<br />";
12
13 // count amount of 'title' attribute, in all tags
14 echo "Occurences of attribute title: " . $stat->countAttribute("title") . "<br />";
15
16 // count amount of 'title' attribute, only in <section> tags
17 echo "Occurences of attribute title in tag section: " . $stat->countAttribute("title", "section") . "<br />";
18
19 // count total number of tags in depth 4
20 echo "Amount of Tags in depth 4: " . $stat->countTagsInDepth(4) . "<br />";
21
22 echo "Occurences of PHP Blocks: " . $stat->countPI("PHP") . "<br />";
23
24 echo "Occurences of external entity 'bar': " . $stat->countExternalEntity("bar") . "<br />";
25
26 echo "Data chunks: " . $stat->countDataChunks() . "<br />";
27
28 echo "Length of all data chunks: " . $stat->getCDataLength() . "<br />";