ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
PHP中有两种主要的XML解析器 1)基于树的解析器。它是把整个文档存储为树的数据结构中,即需要把整个文档都加载到内存中才能工作。所以,当处理大型XML文档时候,性能剧减。SimpleXML和DOM扩展属于此类型解析器。 2)基于流的解析器。它不会一次把整个文档加载到内存中,而是每次分别读取其中的一个节点并允许实时与之交互(当移向下一个节点时,上一个节点是被丢弃,但也设置为保留)。很明显,其效率要高且占内存少,不便之处代码量大点。 所以,PHP中处理大型XML文档可以用XMLReader扩展方案(基于流的解析器)。它在PHP 5.1中默认是启用的 xml格式 v 必须有xml声明语句; v 必须有且仅有一个根元素; xml的标记分类(与html一样机油单闭合也有双闭合): 单闭合标记:\<标记名称 /> 双闭合标记:\<标记名称>....</标记名称> 标记的命名规则: 1.标记名称必须以字母或下划线开头,后边包含字母、数字、下划线。 2.标记名称必须严格区分大小写。 3.标记必须顺序嵌套。 xml属性规则: 属性名 = "属性值" 1.属性名必须以字母或下划线开头,后边可以有数字,字母、下划线; 2.属性值必须括在双引号之内。 3.属性名称必须唯一。 数据(属性)类型: CDATA 字符串 CDATA是表示属性的值,可以是任何字符,这里包括数字和中文 ID 唯一的ID号,表明该属性的取值必须是唯一的。 IDREF 参照其他的ID号定义。是指它的值要指向文档当中其它地方声明的ID。把IDREF当成数据库的外键,把ID当成主键理解就行; IDREFS 同IDREF,但是可以具有由空格分开的多个引用; Enumerated enum 枚举值 预先定义了一些值,属性的值必须在所列出的值的范围内 REQUIRED 它表示元素的所有的实例都必须有该属性的值(NOT NULL) IMPLIED 这就表示该属性的值是可以被忽略的 FIXED 元素中该属性的值必须为指定的固定值 Default 属性提供一个默认的值 命名空间 为标签添加了一个xmlns属性 xmlns ——是XML NameSpace的缩写,因为XML文件的标签名称都是自定义的,自己写的和其他人定义的标签很有可能会重复命名,而功能却不一样,所以需要加上一个namespace来区分这个xml文件和其他的xml文件 注: **1.** 最好的方式莫过于使用 统一资源标识符(Uniform Resource Identifier,URI) 了, 而我们最常见的 URI 就是平时经常访问的网址 URL 了。 **2.** 它并不需要对应一个可以访问的资源或文件 ! 但是, 有很多公司都会让 namespace 的 URI 指向一个包含该命名空间信息的网页 **3.** 没有前缀就代表是默认命名空间。如xmlns=“http://maven.apache.org/POM/4.0.0” xmlns:xsi ——是指xml文件遵守xml规范,xsi全名:xml schema instance,xsi 已经成为了一个业界默认的用于 XSD((XML Schema Definition) 文件的命名空间。 而 XSD 文件(也常常称为 Schema 文件)是用来定义 xml 文档结构的。 注:可以看作一个特殊的带前缀的命名空间。 ``` xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" ``` xsi:schemaLocation——是前一个“键” http://maven.apache.org/POM/4.0.0 指代 【命名空间】, 只是一个全局唯一字符串而已 后一个值指代 【XSD location URI】 , 这个值指示了前一个命名空间所对应的 XSD 文件的位置, xml parser 可以利用这个信息获取到 XSD 文件, 从而通过 XSD 文件对 所有属于 命名空间 http://maven.apache.org/POM/4.0.0 的元素结构进行校验, 因此这个值必然是可以访问的, 且访问到的内容是一个 XSD 文件的内容