pear中几个实用的xml代码库

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 />";

 



 

你可能感兴趣的:(PEAR)