加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

用PHP5的SimpleXML分析XML文档

发布时间:2022-03-09 07:00:02 所属栏目:PHP教程 来源:互联网
导读:以下为引用的内容: messages.xml ======================================================== ?xml version=1.0 ? !--Sample XML document -- SystemMessage MessageTitleSystem Down for Maintenance/MessageTitle MessageBodyGoing down for maintenance
  以下为引用的内容:
  messages.xml
  ========================================================
  <?xml version="1.0" ?>
  <!--Sample XML document -->
  <SystemMessage>
       <MessageTitle>System Down for Maintenance</MessageTitle>
      <MessageBody>Going down for maintenance soon!</MessageBody>
      <MessageAuthor>
     <MessageAuthorName>Joe SystemGod</MessageAuthorName>
     <MessageAuthorEmail>systemgod@someserver.com
  </MessageAuthorEmail>
      </MessageAuthor>
      <MessageDate>March 4, 2004</MessageDate>
     <MessageNumber>10</MessageNumber>
  </SystemMessage>
  ========================================================
  xml 是一种创建元数据的语言,元数据是描述其它数据的数据,PHP中的XML处理是基于LIBXML2的,安装时默认开启。
 
  可以通过phpinfo()函数查看是否开启了XML处理模块,DOM,LIBXML,SAMPLEXML。
 
  首先,通过samplexml_load_file函数把xml文件加载到一个对象中,samplexml_load_file可以用户远程文件。
 
  例如:
 
  $xml = samplexml_load_file("messages.xml"); // 本地文件系统,当前目录
 
  $xml = samplexml_load_file("http://www.xml.org.cn/messages.xml"); // 远程web服务器
 
  用 var_dump($xml) 和 print_r($xml) 分别输出其结构.var_dump给出了变量的类型和长度,而print_r可读性更强输出对象中的所有元素名称和它的值。
 
  echo $xml->MessageTitle; //输出消息的标题
 
  echo $xml->MessageBody; // 输出消息体
 
  echo $xml->MessageAuthor; //消息的作者
 
  echo $xml->MessageDate;  // 消息产生的日期
 
  echo $xml->MessageNumber;  // 消息代码
 
  ===================================================
 
  另外,还有一个函数,可以把XML字符串加载到一个simplexml对象中取。
 
  以下为引用的内容:
  $channel =<<<_XML_
  <channel>
  <title>What's For Dinner</title>
  <link>http://menu.example.com/</link>
  <description>These are your choices of what to eat tonight. </description>
  </channel>
  _XML_;
 
  $xml = simplexml_load_string($channel);
  ===================================================
 
  rss.xml
 
  =============================================
  <?xml version="1.0" encoding="utf-8"?>
  <rss version="0.91">
  <channel>
   <title>What's For Dinner</title>
   <link>http://menu.example.com/</link>
   <description>These are your choices of what to eat tonight.</description>
   <item>
    <title>Braised Sea Cucumber</title>
    <link>http://menu.example.com/dishes.php?dish=cuke</link>
    <description>Gentle flavors of the sea that nourish and refresh you. </description>
   </item>
   <item>
    <title>Baked Giblets with Salt</title>
    <link>http://menu.example.com/dishes.php?dish=giblets</link>
    <description>Rich giblet flavor infused with salt and spice. </description>
   </item>
   <item>
    <title>Abalone with Marrow and Duck Feet</title>
    <link>http://menu.example.com/dishes.php?dish=abalone</link>
    <description>There's no mistaking the special pleasure of abalone. </description>
   </item>
  </channel>
  </rss>
  =====================================================
 
  1、访问具有相同元素名称的节点
 
  2、通过foreach循环所有相同元素名称的子节点
 
  以下为引用的内容:
  foreach($xml->channel->item as $key=>$value)
  {
  print "Title: " . $item->title . "/n";
  }
  3、输出整个文档
 
  echo $xml->asXML();
 
  4、把节点作为字符串输出
 
  echo $xml->channel->item[0]->asXML();
 
  这将输出文本
 
  以下为引用的内容:
  <item>
  <title>Braised Sea Cucumber</title>
  <link>http://menu.example.com/dishes.php?dish=cuke</link>
  <description>Gentle flavors of the sea that nourish and refresh you. </description>
  </item>
  带文件名参数的asXML将会把原本输出的内容保存为一个文件
 
  $xml->channel->item[0]->asXML("item[0].xml");
 
  完整的代码:
 
  以下为引用的内容:
  rss.xml
  =====
  <?xml version="1.0" encoding="utf-8"?>
  <rss version="0.91">
  <channel>
   <title>What's For Dinner</title>
   <link>http://menu.example.com/</link>
   <description>These are your choices of what to eat tonight.</description>
   <item>
    <title>Braised Sea Cucumber</title>
    <link>http://menu.example.com/dishes.php?dish=cuke</link>
    <description>Gentle flavors of the sea that nourish and refresh you. </description>
   </item>
   <item>
    <title>Baked Giblets with Salt</title>
    <link>http://menu.example.com/dishes.php?dish=giblets</link>
    <description>Rich giblet flavor infused with salt and spice. </description>
   </item>
   <item>
    <title>Abalone with Marrow and Duck Feet</title>
    <link>http://menu.example.com/dishes.php?dish=abalone</link>
    <description>There's no mistaking the special pleasure of abalone. </description>
   </item>
  </channel>
  </rss>
 
  rss.php
  ======
  <?php
  $xml = simplexml_load_file("rss.xml");
 
  echo "<h3>".$xml->channel->title."</h3><br>";
  echo "<ul>";
  echo "<li>Title:".$xml->channel->item[0]->title."</li>";
  echo "<li>Title:".$xml->channel->item[1]->title."</li>";
  echo "<li>Title:".$xml->channel->item[2]->title."</li>";
  echo "</ul>";
  print "Title: " . $xml->channel->item[0]->title . "/n<br>";
  print "Title: " . $xml->channel->item[1]->title . "/n<br>";
  print "Title: " . $xml->channel->item[2]->title . "/n<br>";
  echo "<hr>";
 
  foreach ($xml->channel->item[0] as $element_name => $content) {
    print "The $element_name is $content/n<br>";
  }
 
  echo "<hr>";
  print_r($xml);
  echo $xml->channel->item[0]->asXML();
  ?>
 
  任何XML文本在输出前最好用 htmlentiteis() 函数编码后再输出,否这可能出现问题。

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读