12.XML

1.PHP中主要的一些XML扩展

1)SAX;2)DOM;3)XPath;4)XSL;5)SimpleXML;6)XMLReader;7)XMLWrite;8)XML-RPC;9)SOAP;



2.PHP中有两种主要的XML解析器

1)基于树的解析器。它是把整个文档存储为树的数据结构中,即需要把整个文档都加载到内存中才能工作。所以,当处理大型XML文档时候,性能剧减。SimpleXML和DOM扩展属于此类型解析器。

2)基于流的解析器。它不会一次把整个文档加载到内存中,而是每次分别读取其中的一个节点并允许实时与之交互(当移向下一个节点时,上一个节点是被丢弃,但也设置为保留)。很明显,其效率要高且占内存少,不便之处代码量大点。

所以,PHP中处理大型XML文档可以用XMLReader扩展方案(基于流的解析器)。它在PHP 5.1中默认是启用的。如果是处理一些小型的XML,那还是SimpleXML来的比较简单。



3.解析RSS频道

1)SimpleXML:记住一点,如果想要得到访问属性的值,必须要先将其转为适合的类型,否则得到的就是SimpleXMLElement。如何转换,只要在前面加上(string)或(int)等即可。

2)XMLReader解析XML

具体例子见附件,为什么SimpleXML或者Zend_Feed简单多了,我们还要用XMLReader呢?如果要解析大的文档时,SAX仍旧是一个很好的选择,由于它是逐个元素进行解析,这样就可以保持PHP较低的内存占用。XMLReader将SAX的低内存和SimpleXML简单的好处集于一身。

具体XMLReader实例,查看附件,里面有我的大量注释。


4.生成RSS

生成RSS我们有两种方法,一种是DOM方法,一种是XMLWrite方法。

具体代码在附件里面。



5.获得XML中指定的节点或内容

如果我们只是需要得到XML中的某些内容,那就不需要解析所有的XML文档了。这里我们建议使用Xpath。

DOM扩展内置支持Xpath,SimpleXML也是如此,看下面例子:

1)使用DOM扩展的Xpath

$doc = new DOMDocument();

$doc->preserverWhiteSpace = false;

$doc->load('http://www.site.com/rss_feed');

$xpath = new DOMXPath($doc);

$titles = $xpath->query('//item/title');

foreach($titles as $title)

{

    echo $title->nodeValue.'<br/>';

}

2)使用SimpleXML的Xpath


$doc = new SimpleXMLElement(

$url,

null,

true //告诉simpleXML我们提供的是一个URL

);

foreach ($doc->xpath('//item/title') as $title) 

{

echo $title."<br/>";

}


6.Xpath的基本规则

1)正斜杠“/”是路径分隔符

2)根的绝对路径是以单个正斜杠“/”开始

3)文档中匹配元素的任何深度的相对路径以两个正斜杠“//”开始。如上:“//item/title”

4)双句号“..”表明节点为节点的父类,单句号“.”表明为当前节点

还有更多类似正则的匹配,具体查看文档


你可能感兴趣的:(PHP深度分析101个核心技巧)