首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

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

2013-10-24 
php输出符合特定DTD规范的xml文件下面这个php文件是用来输出一个能够通过特定DTD规范的XML文件,这个代码还

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 PRODUCTNAME CDATA #IMPLIEDCATEGORY (HandTool|Table|Shop-Professional) "HandTool"PARTNUM CDATA #IMPLIEDPLANT (Pittsburgh|Milwaukee|Chicago) "Chicago"INVENTORY (InStock|Backordered|Discontinued) "InStock"><!ELEMENT SPECIFICATIONS (#PCDATA)><!ATTLIST SPECIFICATIONSWEIGHT CDATA #IMPLIEDPOWER CDATA #IMPLIED><!ELEMENT OPTIONS (#PCDATA)><!ATTLIST OPTIONSFINISH (Metal|Polished|Matte) "Matte"ADAPTER (Included|Optional|NotApplicable) "Included"CASE (HardShell|Soft|NotApplicable) "HardShell"><!ELEMENT PRICE (#PCDATA)><!ATTLIST PRICEMSRP CDATA #IMPLIEDWHOLESALE CDATA #IMPLIEDSTREET CDATA #IMPLIEDSHIPPING 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函数能够保存文件,如果不存在则会自动创建指定编码格式的文件。

热点排行