欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

php输出吻合特定dtd规范的xml文件

更新时间: 2014-01-05 02:01:19 责任编辑: Author_N1

 

php输出符合特定DTD规范的xml文件

下面这个php文件是用来输出一个能够通过特定DTD规范的XML文件,这个代码还是比较容易理解的,也是比较规范的,如果你想知道php如何输出XML文件,又想直接看代码,那么这篇文章对你可能有点帮助。实在不想码字,直接贴代码:

<meta http-equiv="content-type" content="text/html;charset=utf-8">
<?php 	
	$dom=new DOMDocument("1.0", "utf-8");//设定文件的编码格式
	$dom->formatOutput =true;
	$arr=array("PRODUCT","SPECIFICATIONS","OPTIONS","PRICE","NOTES");
	$tempArr=array();
	for($i=0;$i<2;$i++){
		for($j=0;$j<5;$j++){
			$tempArr[$i][]=$dom->createElement($arr[$j]);
		}	
	}	
	$cata=$dom->appendChild($dom->createElement("CATALOG"));
	$node=array();$textNodeList=array();
	for($i=0;$i<2;$i++){
		$node[]=$cata->appendChild($tempArr[$i][0]);
	}	
	for($i=0;$i<2;$i++){
		for($j=1;$j<5;$j++){
			$textNodeList[$i][]=$node[$i]->appendChild($tempArr[$i][$j]);
		}
	}
	$textNodeList[0][0]->appendChild($dom->createTextNode("Fruits"));
	$textNodeList[0][1]->appendChild($dom->createTextNode("the banana will hurt your body if you eat too much"));
	$textNodeList[0][2]->appendChild($dom->createTextNode("¥23/kg in beijing"));
	$textNodeList[0][3]->appendChild($dom->createTextNode("the fruit which come from jiangxi is cheaper"));
	$node[0]->setAttribute("NAME","banana");
	$node[0]->setAttribute("PLANT","Milwaukee");
	$node[0]->setAttribute("INVENTORY","Backordered");
	$textNodeList[0][0]->setAttribute("WEIGHT","40斤");
	$textNodeList[0][0]->setAttribute("POWER","微小");
	$textNodeList[0][1]->setAttribute("FINISH","Polished");
	
	$textNodeList[1][0]->appendChild($dom->createTextNode("Vegetables"));
	$textNodeList[1][1]->appendChild($dom->createTextNode("rice"));
	$textNodeList[1][2]->appendChild($dom->createTextNode("¥1/kg"));
	$textNodeList[1][3]->appendChild($dom->createTextNode("it comes from ShangDong province"));

	$dom->save("test.xml");//the file will be make if not exist
	
	 $fp=fopen("test.xml", "r+");//不能用w+,要不然文件就会被覆盖,这种方式会覆盖之前写过的信息,而不是插入。
	/*下面的一句话就可以让保存的文件的编码设为UTF-8,而文件默认编码方式为ANSI。这一点可以用记事本程序查看文件的编码方式
	fwrite($fp,"\xef\xbb\xbf"); 
	fwrite($fp, "<?xml ?>"); */	
	$str=<<<FOF
	\r\n<!DOCTYPE CATALOG [
	<!ENTITY AUTHOR "John Doe">
	<!ENTITY COMPANY "JD Power Tools, Inc.">
	<!ENTITY EMAIL "jd@jd-tools.com">
	
	<!ELEMENT CATALOG (PRODUCT+)>
	
	<!ELEMENT PRODUCT
	(SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)>
	<!ATTLIST PRODUCT
	NAME CDATA #IMPLIED
	CATEGORY (HandTool|Table|Shop-Professional) "HandTool"
	PARTNUM CDATA #IMPLIED
	PLANT (Pittsburgh|Milwaukee|Chicago) "Chicago"
	INVENTORY (InStock|Backordered|Discontinued) "InStock">
	
	<!ELEMENT SPECIFICATIONS (#PCDATA)>
	<!ATTLIST SPECIFICATIONS
	WEIGHT CDATA #IMPLIED
	POWER CDATA #IMPLIED>
	
	<!ELEMENT OPTIONS (#PCDATA)>
	<!ATTLIST OPTIONS
	FINISH (Metal|Polished|Matte) "Matte"
	ADAPTER (Included|Optional|NotApplicable) "Included"
	CASE (HardShell|Soft|NotApplicable) "HardShell">
	<!ELEMENT PRICE (#PCDATA)>
	<!ATTLIST PRICE
	MSRP CDATA #IMPLIED
	WHOLESALE CDATA #IMPLIED
	STREET CDATA #IMPLIED
	SHIPPING CDATA #IMPLIED>
	<!ELEMENT NOTES (#PCDATA)>]>
FOF;
	fgets($fp,200);//第一行字节留有200足够,使文件指针转移到下一行
	$xml="";
	while(!feof($fp)){
		$xml.=fread($fp, 1024);
	}
	rewind($fp);
	fgets($fp,200);
	fwrite($fp,$str);
	fwrite($fp, $xml);
	fclose($fp);
	
?>

这里面有几点要注意:例如最后反复用fgets()函数和rewind()函数,其实只是为了能够插入一段文字,直接写就会覆盖原内容。fgets函数能够读取一行信息,同时也将文件指针移到下一行了,这里的目的就是为了移动文件指针。DOMDocument类的save函数能够保存文件,如果不存在则会自动创建指定编码格式的文件。

上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:01:19
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/4608/
本文WWW.DOC100.NET DOC100.NET版权所有。