php读取xml 文件

 更新时间:2016年11月25日 16:55  点击:2299

读取xml文件,php 读取html文件,如何读取xml文件

$obj = new JZH_xml("<STRING>asdfasdf</STRING>");
$obj->setChar('gb2312');
$obj->getElementByTagname('string',0)->value;
$obj->getstring(0)->value;
...
/*
       轻便的xml文档操作
       setChar 编码转换
       parse 解析xml文档
       parse_file 从文件解析xml文档
       getElementByTagname 获得tag对象
       get<tag> 获得tag对象
*/
class JZH_xml{
       var $index;
       var $vals;
       var $in='utf-8';
       var $out='utf-8';
       var $xmlobj;
       function JZH_xml($data=false,$in=false,$out=false){
              $this->xmlobj = xml_parser_create();
              if($data){
                     xml_parse_into_struct($this->xmlobj, $data, $this->vals, $this->index);
                     xml_parser_free($this->xmlobj);
              }
       }
       function setChar($out=false,$in=false){
              if($in)$this->in=$in;
              if($out)$this->out=$out;
              array_walk_recursive($this->vals,array($this,'iconv'));
       }
       function iconv(&$value, $key){
              $value=iconv($this->in,$this->out,$value);
       }
       function parse($data){
              
              xml_parse_into_struct($this->xmlobj, $data, $this->vals, $this->index);
              xml_parser_free($this->xmlobj);
       }
       function parse_file($file){
              $data = file_get_contents($file);
              $this->parse($data);
       }
       function getElementByTagname($tag,$index){
              $tag = strtoupper($tag);
              if(!isset($this->index[$tag][$index]))return false;
              $index = $this->index[$tag][$index];
              return (object)$this->vals[$index];
       }
       function __call($name,$arguments){
              if(($tag=str_replace('GET','',strtoupper($name)))==strtoupper($name))return false;
              return $this->getElementByTagname($tag,$arguments[0]);
       }
}


<?php
$doc = new DOMDocument();
$doc->load( 'books.xml' );

$books = $doc->getElementsByTagName( "book" );
foreach( $books as $book )
{
$authors = $book->getElementsByTagName( "author" );
$author = $authors->item(0)->nodeValue;

$publishers = $book->getElementsByTagName( "publisher" );
$publisher = $publishers->item(0)->nodeValue;

$titles = $book->getElementsByTagName( "title" );
$title = $titles->item(0)->nodeValue;

echo "$title - $author - $publishern";
}
?>
 代码如下 复制代码

<?php
  $books = array();
  $books [] = array(
  'title' => 'PHP Hacks',
  'author' => 'Jack Herrington',
  'publisher' => "O'Reilly"
  );
  $books [] = array(
  'title' => 'Podcasting Hacks',
  'author' => 'Jack Herrington',
  'publisher' => "O'Reilly"
  );
 
  $doc = new DOMDocument();
  $doc->formatOutput = true;
 
  $r = $doc->createElement( "books" );
  $doc->appendChild( $r );
 
  foreach( $books as $book )
  {
  $b = $doc->createElement( "book" );
 
  $author = $doc->createElement( "author" );
  $author->appendChild(
  $doc->createTextNode( $book['author'] )
  );
  $b->appendChild( $author );
 
  $title = $doc->createElement( "title" );
  $title->appendChild(
  $doc->createTextNode( $book['title'] )
  );
  $b->appendChild( $title );
 
  $publisher = $doc->createElement( "publisher" );
  $publisher->appendChild(
  $doc->createTextNode( $book['publisher'] )
  );
  $b->appendChild( $publisher );
 
  $r->appendChild( $b );
  }
 
  echo $doc->saveXML();
  ?>

 php 读取xml   php读取远程xml   php 读取文件   读取xml文件 
 

<?php
$path = 'http://xxx.xxx.xxx/example.xml';
$str = file_get_contents($path);
$str = <<<str
...
<yw:cdtn text="Fair" code="34" temp="7" date="Thu, 10 Apr 2008 9:50 am BST" />
...
<yw:f day="Thu" date="10 Apr 2008" low="1" high="11" text="Light Rain" code="11" />
<yw:f day="Fri" date="11 Apr 2008" low="1" high="10" text="Light Rain" code="11" />
...
str;
preg_match('/<yw:cdtn.*text="(.*)"/iU', $str, $arr);
echo $arr[1];
preg_match_all('/<yw:f.*text="(.*)"/iU', $str, $arr);
print_r($arr[1]);
?>


<?php
/*****************************************
*           RSS2.0 Generator
*          Create by MagicBoy(darasion)
*          Copyright ? 神奇男孩 
******************************************/

/*————————————————

使用方法:
将下面的数组,带入相应的函数。

1、频道主体
$channel = array(
title => '频道名称(必备)',
link => '频道的URL(必备)',
description => '频道的描述(必备)',
language => '频道文章所用语言(可选)',
webmaster => '负责频道技术事务的网站管理员email(可选)',
managingEditor => '责任编辑的email(可选)',
pubDate => '频道内容发布日期,格式遵循RFC822格式(年份可为2位或4位)(可选)',
lastBuildDate => '频道内容最后的修改日期(Sat, 07 Sep 2002 09:42:31 GMT)(可选)',
skipDays => '提示新闻聚合器,那些天它可以跳过。(可选)',
copyright => '频道内容的版权说明(可选)',
ttl => '有效期,用以指明该频道可被缓存的最长时间(可选)',
);

2、频道图片
$image = array(
url => '图片的链接(必备)',
title => '图片的标题,用于http的alt属性(必备)',
link => '网站的url(实际中常以频道的url代替)(必备)',
width => '图片的宽度(象素为单位)最大144,默认88(可选)',
height => '图片的高度(象素为单位)最大400,默认31(可选)',
description => '用于link的title属性(可选)' 
   );

3、频道项
$item = array(
title => '项(item)的标题(必备)',
description => '项的大纲(必备)',
link => '项的URL(必备)',
comments => '该项的评论(comments)页的URL(可选)',
guid => '1项的唯一标志符串(可选)',
author => '该项作者的email(可选)',
enclosure => '描述该附带的媒体对象(可选)',
category => '包含该项的一个或几个分类(catogory)(可选)',
pubdate => '项的发布时间(可选)',
source_url => '该项来自的RSS道(可选)',
source_name => '该项来自的RSS道(可选)'
);
————————————————*/

class 
rss2
{
var 
$channel_pre=""
;
var 
$str_image=""
;
var 
$str_item=""
;
var 
$channel_end=""
;
/*构造函数*/
function rss2($channel,$encoding="GB2312"
)
  {
   
$this->channel($channel,$encoding
);
  }
/*生成频道主体*/
function channel($channel,$encoding="GB2312"
)
  {
  
$this->channel_pre.="<?xml version=\"1.0\" encoding=\"$encoding\"?>\n"
;
  
$this->channel_pre.= "<rss version=\"2.0\">\n"
;

  
$this->channel_pre.= " <channel>\n"
;

  
$this->channel_pre.= "  <title>".$channel['title']."</title>\n";
//频道名称(必备)
  
$this->channel_pre.= "  <link>".$channel['link']."</link>\n";
//频道的URL(必备)
  
$this->channel_pre.= "  <description>".$channel['description']."</description>\n";
//频道的描述(必备)
  
$this->channel_pre.= "  <generator>MagicBoy RSS Generator v1.0</generator>\n";
//创建此文档的程序(可选)

  
if(isset($channel['language']))$this->channel_pre.= "  <language>".$channel['language']."</language>\n";
//频道文章所用语言(可选)
  
if(isset($channel['webmaster']))$this->channel_pre.= "  <webMaster>".$channel['webmaster']."</webMaster>\n";
//负责频道技术事务的网站管理员email(可选)
  
if(isset($channel['managingeditor']))$this->channel_pre.= "  <managingEditor>".$channel['managingeditor']."</managingEditor>\n";
//责任编辑的email(可选)
  
if(isset($channel['pubdate']))$this->channel_pre.= "  <pubDate>".$channel['pubdate']."</pubDate>\n";
//频道内容发布日期,格式遵循RFC822格式(年份可为2位或4位)(可选)
  
if(isset($channel['lastbuilddate']))$this->channel_pre.= "  <lastBuildDate>".$channel['lastbuilddate']."</lastBuildDate>\n";
//频道内容最后的修改日期(Sat, 07 Sep 2002 09:42:31 GMT)(可选)
  
if(isset($channel['skipdays']))$this->channel_pre.= "  <skipDays>".$channel['skipdays']."</skipDays>\n";
//提示新闻聚合器,那些天它可以跳过。(可选)
  
if(isset($channel['copyright']))$this->channel_pre.= "  <copyright>".$channel['copyright']."</copyright>\n";
//频道内容的版权说明(可选)
  
if(isset($channel['ttl']))$this->channel_pre.= "  <ttl>".$channel['ttl']."</ttl>\n";
//有效期,用以指明该频道可被缓存的最长时间(可选)

  
$this->channel_end.= " </channel>\n"
;
  
$this->channel_end.= "</rss>\n"
;
}
/*生成频道图片*/
function image($image
)
{
  if(isset(
$this->str_image))unset($this->str_image
);
  
$this->str_image.= "  <image>\n"
;
  if(isset(
$image['url']))$this->str_image.= "   <url>".$image['url']."</url>\n";
//图片的url(必备)
  
if(isset($image['title']))$this->str_image.= "   <title>".$image['title']."</title>\n";
//图片的标题,用于http的alt属性(必备)
  
if(isset($image['link']))$this->str_image.= "   <link>".$image['link']."</link>\n";
//网站的url(实际中常以频道的url代替)(必备)
  
if(isset($image['width']))$this->str_image.= "   <width>".$image['width']."</width>\n";
//图片的宽度(象素为单位)最大144,默认88(可选)
  
if(isset($image['height']))$this->str_image.= "   <height>".$image['height']."</height>\n";
//图片的高度(象素为单位)最大400,默认31(可选) 
  
if(isset($image['description']))$this->str_image.= "   <description>".$image['description']."</description>\n";
//用于link的title属性(可选)
  
$this->str_image.= "  </image>\n"
;
}
/*频道项*/
function item($item
)
{
  
$this->str_item.="  <item>\n"
;
  
$this->str_item.="   <title>".$item['title']."</title>\n";
//项(item)的标题(必备)
  
$this->str_item.="   <description>".$item['description']."</description>\n";
//项的大纲(必备)
  
$this->str_item.="   <link>".$item['link']."</link>\n";
//项的URL(必备)

  
if(isset($item['comments']))$this->str_item.="   <comments>".$item['comments']."</comments>\n";
//该项的评论(comments)页的URL(可选)
  
if(isset($item['guid']))$this->str_item.="   <guid>".$item['guid']."</guid>\n";
//1项的唯一标志符串(可选)
  
if(isset($item['author']))$this->str_item.="   <author>".$item['author']."</author>\n";
//该项作者的email(可选)
  
if(isset($item['enclosure']))$this->str_item.="   <enclosure>".$item['enclosure']."</enclosure>\n";
//描述该附带的媒体对象(可选)
  
if(isset($item['category']))$this->str_item.="   <category>".$item['category']."</category>\n";
//包含该项的一个或几个分类(catogory)(可选)
  
if(isset($item['pubdate']))$this->str_item.="   <pubDate>".$item['pubdate']."</pubDate>\n";
//项的发布时间(可选)
  
if(isset($item['source_url']))$this->str_item.="   <source url=\"".$item['source_url']."\">".$item['source_name']."</source>\n";
//该项来自的RSS道(可选)
  
$this->str_item.="  </item>\n"
;
}
/*输出xml*/
function generate
()
{
  if(isset(
$this->channel_pre)&&isset($this->channel_end)&&isset($this->str_item
))
  {
   
Header("Content-type:text/xml"
);
   echo 
$this->channel_pre
;
   echo 
$this->str_image
;
   echo 
$this->str_item
;
   echo 
$this->channel_end
;
  }
}
/*擦除频道*/
function erase_channel
()
{
  unset(
$this->channel_pre
);
  unset(
$this->channel_end
);
}
/*擦除频道图片*/
function erase_image
()
{
  unset(
$this->str_image
);
}
/*擦除项目*/
function erase_item
()
{
  unset(
$this->str_item
);
}
/*擦除所有*/
function erase
()
{
  
$this->erase_channel
();
  
$this->erase_image
();
  
$this->erase_item
();
}
}
?>

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • php把读取xml 文档并转换成json数据代码

    在php中解析xml文档用专门的函数domdocument来处理,把json在php中也有相关的处理函数,我们要把数据xml 数据存到一个数据再用json_encode直接换成json数据就OK了。...2016-11-25
  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • AI源文件转photoshop图像变模糊问题解决教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
  • C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • C#路径,文件,目录及IO常见操作汇总

    这篇文章主要介绍了C#路径,文件,目录及IO常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21