PHP对XML的支持

PHP从PHP5开始,彻底重新编写的和新增了对XML的扩展,如 SAX 解析器、DOM、SimpleXML、XMLReader、XMLWriter 和 XSLT 处理程序。所有这些扩展都以 libxml2 为基础。

=============================
1、DOMDocument对象常用方法:
=============================

a)createElement(elementName)
    该方法以元素名为参数创建一个用此参数命名的元素节点。(不能创建名称空间受限制的元素。如果要创建名称空间受限制的元素,必须使用createNode()方法)
    例:doc.createElement("PRODUCT"),有些用到:doc->creatElement('item')
  
b)createAttribute(attributeName)
    该方法以属性名为参数创建一个用此参数命名的属性节点。
    例:doc.createAttribute("PRODID")
    xml中表现形式:<itemupload_name="上3"><download_name>下载通道名称</download_name></item>
  
c)createComment(text)
    该方法以字符串为参数创建一个包含此字符串的注释节点。
    例:doc.createComment("ThisisanXMLdocument")
    <item><!--upload_name--><download_name>下载通道名称</download_name></item>

d)createTextNode(text)
    该方法以字符串为参数创建一个包含指定字符串的正文节点。
    例:doc.createTextNode("SonyWorkman")
  
e)createNode(type,name,namespace-URI)
    该方法创建元素节点。三个参数,"类型"参数是variant型,既可以是字符串也可以是整型。第二个参数是字符串,它代表将要创建的节点的名字。第三个参数是代表namespace-URI的字符串。如果namespace-URI为空字符串,则新创建的节点就没有名称空间URI
    例:doc.createNode("element","PRODUCT","")
    doc.createNode("element","prod:PRODUCT","blog.csdn.net/fcrpg2005")
    doc.createNode(1,"PRODUCT","")
  
f)getElementsByTagName(elementName)
    该方法以字符串为参数。这个字符串是要搜索的元素。返回IXMLDOMNodeList对象,包含指定元素名称的节点的集合。可以用这些节点信来浏览操纵存储在指定元素中的值。
    例:doc.getEelmentsByTagName("PRICE")
  
g)load(XMLdocument)
    该方法以字符串为参数。这个字符串是XML文档的地址(HTTP地址或本地地址)
    例:doc.load("http://blog.csdn.net/fcrpg2005/product.xml")
    doc.load("D:/product.xml")
  
h)loadXML(string)
    该方法把成形的XML代码或整个XML文档载入DOMDocument对象中。
    例:doc.loadXML("<?xmlversion=1.0><PRODUCTS><PRODUCT>& lt;name>BarbieDoll</name></PRODUCT></PRODUCTS>")
  
i)transformNode(stylesheetobject)
    该方法以风格表对象为参数。通过把相应的风格表加到XML文档上来处理节点,然后返回转换结果。
    例:doc.transformNode("product.xsl")
  
j)appendChild(childnode)
    该方法以对象为参数。把这个对象作为最后的子节点加在XML文档上。createNode()或者createElement()方法可以创建节点或元素。但是它们不会把新建的节点加到文档树形结构上。而是需要用appendChild()方法,insertBefore()方法,或者 replaceChild()方法把新建的节点加上去。
    例:doc.appendChild(root)
    PS:root是一个用createNode()或createElement()方法创建的节点
  
k)save(destination)
    该方法以对象为参数。这个对象可以是一个DOMDocument对象也可以是一个文件名。save()方法把DOMDocument对象保存在指定的目的地。
    例:doc.save(http://blog.csdn.net/fcrpg2005/product.xml)

=============================
2、DOMDocument对象常用属性:
=============================

a)async
    该属性用来指定是否允许异步加载。属性async取布尔值。
    例:doc.async=false--同步
  
b)childNodes
    该属性返回属于一个父节点的子节点集合(即返回当前元素所有子元素的数组对象)。该属性的值是对象IXMLDOMNodeList的类型。
    例:varfirstelem=doc.childNodes.item(0)  

c)parentNode
    该属性返回属于一个子节点的父节点。
    例:varfirstelem=doc.parentNode
  
d)documentElement
    该属性包含用对象DOMDocument表示的XML文档的根元素。
    例:varroot=doc.documentElement
  
e)firstChild
    该属性返回父元素的第一个子节点。该元素是只读的。
    例:varfirstelem=doc.firstChild
  
f)lastChild
    该属性返回父元素的最后一个子节点。
    例:varlastelem=doc.lastChild
  
g)parseError
    该属性返回一个包含大部分最近产生的错误信息的对象。
    例:varerror=doc.parseError
  
h)readyState
    该属性返回XML文档的状态。它显示这个文档是否已完全载入。4个状态:0-未初始化、1-正在加载、2-已加载、3-交互中、4-已完成
    例:varstateInfo=doc.readState
    if(stateInfo==4){//Documentloading
    //Coding
    }
  
i)xml
    该属性返回一个节点以有其子节点的XML表示。
    例:document.write(doc.xml)
  
j)validateOnParse
    该属性指定解析器是否在解析XML文档时验证其合法性。
    例:doc.validateOnParse=true

一、Php访问DOM对象
注意,在php访问DOM对象之前必须确保安装以下软件,否则可能找不到DOM类:
php-common-5.1.6-23.2.el5_3.x86_64.rpm
php-xml-5.1.6-23.2.el5_3.x86_64.rpm

(1)创建一个XML文件
<?php


 //Creates XML string and XML document using the DOM
 $dom = new DomDocument('1.0');
 //add root - <books>
 $books = $dom->appendChild($dom->createElement('books'));
 
 //add <book> element to <books>
 $book = $books->appendChild($dom->createElement('book'));
 
 //add <title> element to <book>
 $title = $book->appendChild($dom->createElement('title'));
 
 //add <title> text node element to <title>
 $title->appendChild($dom->createTextNode('Great American Novel'));
 
 //generate xml
 $dom->formatOutput = true; // set the formatOutput attribute of domDocument to true
 // save XML as string or file
 $test1 = $dom->saveXML(); // put string in test1
 $dom -> save('test1.xml'); // save as file
 
?>

所创建的XML文件test1.xm内容为:
<?xml version="1.0"?>
<books>
  <book>
    <title>Great American Novel</title>
  </book>
</books>

(2)PHP读取xml文件

如果 DOM 不可用,可以用 PHP 的文本模板编写 XML。脚本的顶部与 DOM 脚本类似。脚本的底部打开 books 标记,然后在每个图书中迭代,创建 book 标记和所有的内部 title、author 和 publisher 标记。

这种方法的问题是对实体进行编码。为了确保实体编码正确,必须在每个项目上调用 htmlentities 函数,这就是用基本的 PHP 编写 XML 的烦人之处。您以为自己创建了完美的 XML,但是在试图使用数据的时候,马上就会发现某些元素的编码不正确。

你可能感兴趣的:(PHP对XML的支持)