php 使用xpath
在本文中,了解以下概念:
- 用于XPath
- 编写基本的XPath表达式
- 使用PHP XML库的XPath功能
- 使用XPath和PHP转换数据格式
本文提供了几个可以结合使用XPath和PHP的工作示例,并假设您具有Prerequisites中描述的先决条件 。
先决条件
为了从本文中获得最大收益,您应该具有XML和PHP5知识以及配置和安装PHP扩展。 此外,您还需要访问并了解带有支持PHP5的Web服务器的基于UNIX®或Microsoft®Windows®操作系统的知识,并可以在本文上练习本文中的代码示例。
了解对XPath的需求
随着Web向语义Web的原始愿景发展,应用程序之间的交互性也越来越强。 诸如SOAP,REST,RSS,RDF之类的技术以及其他技术是未来Web的强大推动者。 在大多数情况下,XML是用来描述所涉及数据的选定消息格式。 在某种程度上,您可以使用JSON,但您可能会将XML视为主要的数据交换方法。
或者,您可能会遇到将XML数据转换为XHTML,以为移动用户和各种Web浏览器提供有吸引力的,交互式的和可用的界面的任务。
将数据作为XML文档存储到文件系统或XML兼容数据库也是一种流行的方式来存档数据,以供以后检索以执行报告,用户界面显示或应用程序集成等任务。
使用XML数据时,您需要解析数据以获取最小公分母-所需数据(或原子节点值,通常称为原子节点值)。 XSLT是W3C标准,它执行XML到另一种格式的转换,例如HTML,PDF,甚至是另一种使用不同模式的XML文档。 XQuery,XForms和XPointer都非常依赖XPath的使用。
XPath背景
以最简单的形式,XPath是一种用于在内存中导航XML树的语言。 最初,XPath被设计为XSLT和XPointer的语言。 XPath 1.0在1999年成为W3C标准。较新的XPath 2.0在2007年获得规范状态。
随着其他XML规范的出现,XPath的使用也出现了。 如今,XPath已成为在XML模式,ISO Schematron,XQuery和XForms中导航XML的首选语言。 具有讽刺意味的是,但有充分的理由,XPath不是基于XML语法的。 它使用自己的语法来避免与URI和其他XML相关语法的冲突。
在PHP中使用XPath时,请记住不要单独使用XPath。 您可以使用它作为在其他XML规范之一中工作时在内存中浏览XML的工具。
出于本文的目的,我在讨论和示例中使用了更广泛使用的XPath 1.0规范。 XPath 2.0向后兼容XPath 1.0,但是PHP今天对XPath 2.0的支持有限。
XPath规范提供了其标准用法和术语的详细说明。 如果您期望将XPath与PHP一起复杂使用,则此规范是可靠的参考点。 否则,XPath规范可以归纳为四个主要的关注领域,如表1所示 。
表1. XPath规范的四个主要领域
区 | 描述 | 例子 |
---|---|---|
位置路径 | 包含位置步骤,轴,谓词和缩写语法。 | 父::节点,子::文本(),属性:: *,/ PRODUCTS / PRODUCT [3] / NAME |
资料模型 | 将XML描述为树。 包含根,属性,文本,名称空间,元素,处理指令和注释的节点。 | /,/ ns1:PRODUCTS / ns1:PRODUCT,@category |
表达方式 | 可能包含变量引用,函数,布尔值,数字,字符串和谓词。 | / PRODUCTS / PRODUCT / NAME [字符串长度()> 15] /../@ category |
功能 | XPath 1.0具有27个内置函数,这些函数分为节点集,字符串,布尔值或数字函数。 | string-length(),true(),sum() |
编写XPath表达式
在编写PHP代码之前,花一些时间检查XPath节点,路径和功能。 清单1中的products.xml文件提供了一些常用表达式的示例,这些表达式可基于谓词在XML路径中定位数据,定位节点的原子值并利用函数。
清单1.示例产品XML文档(products.xml)
<?xml version="1.0" encoding="UTF-8"?>
<PRODUCTS>
<PRODUCT category="software">
<SKU&