php解析XML

本文根据w3c整理

建立 XMLDemo.php,如下:

<?php
/**
 * 有两种基本的 XML 解析器类型:
	基于树的解析器:这种解析器把 XML 文档转换为树型结构。它分析整篇文档,并提供了 API 来访问树种的元素,
					例如文档对象模型 (DOM)。
	基于事件的解析器:将 XML 文档视为一系列的事件。当某个具体的事件发生时,解析器会调用函数来处理。
 */

//基于 Expat 解析器

	$parser=xml_parser_create();			//通过 xml_parser_create() 函数初始化 XML 解析器
	function start($parser,$element_name,$element_attrs)   //从这里开始
	  {
	  switch($element_name)
	    {
	    case "NOTE":
	    echo "-- Note --<br />";
	    break; 
	    case "TO":
	    echo "To: ";
	    break; 
	    case "FROM":
	    echo "From: ";
	    break; 
	    case "HEADING":
	    echo "Heading: ";
	    break; 
	    case "BODY":
	    echo "Message: ";
	    }
	  }
	
	//Function to use at the end of an element
	function stop($parser,$element_name)       		 //从这里结束
	  {
	  echo "<br />";
	  }
	
	//Function to use when finding character data
	function char($parser,$data)
	  {
	  echo $data;
	  }
	
	// xml_set_element_handler()函数定义当解析器遇到开始和结束标签时执行哪个函数
	xml_set_element_handler($parser,"start","stop");
	
 	//xml_set_character_data_handler() 函数来定义,当解析器遇到字符数据时执行哪个函数	
 	xml_set_character_data_handler($parser,"char");
	
	//打开XML文件
	$fp=fopen("note.xml","r");
	
	//开始读取
	while ($data=fread($fp,4096))
	  {
	 //通过 xml_parse() 函数来开始解析文件 "note.xml",
	  xml_parse($parser,$data,feof($fp)) or 
	  //万一有错误的话,添加 xml_error_string() 函数把 XML 错误转换为文本说明
	  die (sprintf("XML 错误: %s at line %d",xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser)));			//函数获取 XML 解析器的当前行号
	  }
	
	//xml_parser_free() 函数来释放分配给 xml_parser_create() 函数的内
	xml_parser_free($parser);
		

	echo "<br>";
	echo "<br>";
	
	//======================================通过内建的 DOM 解析器使在 PHP 中处理 XML
	
	echo "通过内建的 DOM 解析器使在 PHP 中处理 XML"."<br>";
	$xmlDoc = new DOMDocument();
	$xmlDoc->load("note.xml");
	
	print $xmlDoc->saveXML();
	
	
	echo "<br>";
	echo "<br>";
	/**
	 * 循环 XML
	 * 我们要初始化 XML 解析器,加载 XML,并循环 <note> 元素的所有元素:
	 */

	$xmlDoc = new DOMDocument();
	$xmlDoc->load("note.xml");
	
	$x = $xmlDoc->documentElement;
	foreach ($x->childNodes AS $item)
	  {
	 	 print $item->nodeName . " = " . $item->nodeValue . "<br />";
	  }
	
	
	//======================================使用 SimpleXML解析xml文件
	echo "<br>";
	echo "<br>";
	echo "使用 SimpleXML解析xml文件"."<br>";
	
	  $xml = simplexml_load_file("note.xml");

		echo $xml->getName() . "<br />";
		
		foreach($xml->children() as $child)
		  {
		  echo $child->getName() . ": " . $child . "<br />";
		  }
	  


建立XML文档,note.xml,如下:

<?xml version="1.0" encoding="utf-8" ?>
<note>
	<to>majianjie1</to>
	<from>majianjie2</from>
	<HEADING>reminber</HEADING>
	<body>this afternoon have a meeting</body>
</note>

结果如图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值