微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

pear中几个实用的xml代码库

1.XML_Beautifier

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

<?PHP
require_once "XML/Beautifier.PHP";
$fmt = new XML_Beautifier();
$result = $fmt->formatFile('originalFile.xml','beautifiedFile.xml');

if (PEAR::isError($result)) {
    echo $result->getMessage();
    exit();
}
echo "File beautified,awaiting orders!<br />";
?>

2.XML_DTD

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

<?PHP

require_once 'XML/DTD/XmlValidator.PHP';

$dtd_file = realpath('myfile.dtd');
$xml_file = realpath('myfile.xml');

$validator = new XML_DTD_XmlValidator();
if (!$validator->isValid($dtd_file,$xml_file)) {
    die($validator->getMessage());
}

?>


3.XML_Feed_Parser

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

<?PHP
/* The file you wish to parse */
$source = 'my_source.xml';

/* Where Relax NG is available,we can force validation of the Feed */
$validate = true;

/* Whether or not to suppress non-fatal warnings */
$suppress_warnings = false;

/* If the Feed is not valid XML and the tidy extension is installed we can
 * attempt to use it to fix the Feed */
$use_tidy = true;

$Feed = new XML_Feed_Parser($source,$validate,$suppress_warnings,$use_tidy);

foreach ($Feed as $entry) {
    print $entry->title . "\n";
}

$first_entry = $Feed->getEntryByOffset(0);

$particular_entry = $Feed->getEntryById('http://jystewart.net/entry/1');
?>


4.XML_Parser

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

<?PHP
require_once 'XML/Parser.PHP';

class myParser extends XML_Parser
{
  function myParser()
  {
    parent::XML_Parser();
  }

 /**
  * 处理起始标签
  *
  * @access private
  * @param  resource  xml parser 句柄
  * @param  string    标签名
  * @param  array     属性值
  */
  function startHandler($xp,$name,$attribs)
  {
    printf('handle start tag: %s<br />',$name);
  }

 /**
  * 处理结束标签
  *
  * @access private
  * @param  resource  xml parser 句柄
  * @param  string    标签名
  */
  function endHandler($xp,$name)
  {
    printf('handle end tag: %s<br />',$name);
  }

 /**
  * 处理字符数据
  *
  * @access private
  * @param  resource  xml parser 句柄
  * @param  string    字符数据
  */
  function cdataHandler($xp,$cdata)
  {
    // does nothing here,but might e.g. print $cdata
  }
}

$p = &new myParser();

$result = $p->setInputFile('xml_parser_file.xml');
$result = $p->parse();
?>

5.XML_Query2XML

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

<?PHP
  require_once 'XML/Query2XML.PHP';
  $pdo = new PDO('MysqL://root@localhost/Query2XML_Tests');
  $query2xml = XML_Query2XML::factory($pdo);
  $artistid = $_REQUEST['artistid'];
  $dom = $query2xml->getXML(
    array(
      'data' => array(
        ":$artistid"
      ),'query' => 'SELECT * FROM artist WHERE artistid = ?'
    ),array(
      'roottag' => 'favorite_artist','idColumn' => 'artistid','rowTag' => 'artist','elements' => array(
        'name','birth_year','music_genre' => 'genre'
      )
    )
  );
  header('Content-Type: application/xml');
  $dom->formatOutput = true;
  print $dom->saveXML();
?>


6.XML_RDDL

读取资源目录描述语言(Resource Directory Description Language,RDDL)
<?PHP
require_once "XML/RDDL.PHP";

// create new RDDL parser
$rddl   = &new XML_RDDL();

// parse a document that contains RDDL resources
$result = $rddl->parseRDDL('http://www.rddl.org');
// check for error
if (PEAR::isError($result)) {
  echo    sprintf( "ERROR: %s (code %d)",$result->getMessage(),$result->getCode());
  exit;
}

// get all resources
$resources = $rddl->getAllResources();
echo    "<pre>";
print_r($resources);
echo    "</pre>";

//    get one resource by its Id
$test = $rddl->getResourceById('CSS');
echo    "<pre>";
print_r($test);
echo    "</pre>";

// get all stylesheets
$test = $rddl->getResourcesByNature('http://www.w3.org/1999/XSL/Transform');
echo    "<pre>";
print_r($test);
echo    "</pre>";

// get all normative references
$test = $rddl->getResourcesByPurpose('http://www.rddl.org/purposes#normative-reference');
echo    "<pre>";
print_r($test);
echo    "</pre>";
?>

7.XML_RSS

RSS解析器
<?PHP
require_once "XML/RSS.PHP";

$RSS =& new XML_RSS("http://RSS.slashdot.org/Slashdot/slashdot");
$RSS->parse();

echo "<h1>Headlines from <a href=\"http://slashdot.org\">Slashdot</a></h1>\n";
echo "<ul>\n";

foreach ($RSS->getItems() as $item) {
    echo "<li><a href=\"" . $item['link'] . "\">" . $item['title'] . "</a></li>\n";
}

echo "</ul>\n";
?>

8.XML_Serializer

XML生成
<?PHP
require_once 'XML/Serializer.PHP';

$options = array(
    "indent"    => "    ","linebreak" => "\n","typeHints" => false,"addDecl"   => true,"encoding"  => "UTF-8","rootName"   => "rdf:RDF","defaultTagName" => "item"
);

$stories[] = array(
    'title'       => 'First Article','link'        => 'http://freedomink.org/node/view/55','description' => 'Short blurb about article........'
);

$stories[] = array(
    'title'       => 'Second Article','link'        => 'http://freedomink.org/node/view/11','description' => 'This article shows you how ......'
);

$data['channel'] = array(
    "title" => "Freedom Ink","link"  => "http://freedomink.org/",$stories
);

$serializer = new XML_Serializer($options);

if ($serializer->serialize($data)) {
    header('Content-type: text/xml');
    echo $serializer->getSerializedData();
}
?>


9.XML_sql2xml

通过sql语句直接从数据库中调取数据转化成xml
<?PHP
  require_once "XML/sql2xml.PHP";
  $sql2xmlclass = new xml_sql2xml("MysqL://username:password@localhost/xmltest");
  $xmlstring = $sql2xmlclass->getxml("select * from bands");
?>

10.XML_Statistics

XML数据统计标签个数,结构深度等,相当好用
<?PHP
require_once "XML/Statistics.PHP";
$stat = new XML_Statistics(array("ignoreWhitespace" => true));
$result = $stat->analyzefile("example.xml");

if ($stat->isError($result)) {
    die("Error: " . $result->getMessage());
}

// total amount of tags:
echo "Total tags: " . $stat->countTag() . "<br />";

// count amount of 'title' attribute,in all tags
echo "Occurences of attribute title: " . $stat->countAttribute("title") . "<br />";

// count amount of 'title' attribute,only in <section> tags
echo "Occurences of attribute title in tag section: " . $stat->countAttribute("title","section") . "<br />";

// count total number of tags in depth 4
echo "Amount of Tags in depth 4: " . $stat->countTagsInDepth(4) . "<br />";

echo "Occurences of PHP Blocks: " . $stat->countPI("PHP") . "<br />";

echo "Occurences of external entity 'bar': " . $stat->countExternalEntity("bar") . "<br />";

echo "Data chunks: " . $stat->countDataChunks() . "<br />";

echo "Length of all data chunks: " . $stat->getCDataLength() . "<br />";

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇