1.PHP DOM (1)

Php中的DOM跟javascript不一样,属性不用另外增加一个节点

2.主要类

DOMDocument :文档类

DOMNodeList :节点列表类

DOMNode :节点类

DOMElement :元素类

3. DOMDocument

3.1创建文档对象

DOMDocument::__construct ([ string $version [, string $encoding ]] )

[ string $version :版本号

[, string $encoding ]]:字符集

3.2、加载xml文件

mixed DOMDocument::load ( string $filename)

string $filename:要加载的xml文件名称

3.3、获取节点

DOMNodeList DOMDocument::getElementsByTagName ( string name )

String name:要获取的节点名

示例:Demo.php

<?php
header ( 'Content-Type:text/html;charset=gb2312' );
// 利用php解析demo01.xml
// 实例化dom对象
$dom = new DOMDocument ();
// 加载xml文件
$dom->load ( 'demo01.xml' );
// 通过dom对象获取person节点,注意:这里返回值是一个DOMNodeList类对象
$persons = $dom->getElementsByTagName ( 'person' );
// 共有几个person
echo '共有' . $persons->length . '个人<br>'; //输出共有两个人
// 选中索引为0的person,也就是第一个人
$person = $persons->item ( );
// 在这个person下获取name节点,返回的仍然是一个DOMNodeList类对象
$names = $person->getElementsByTagName ( 'name' );
// 输出姓名
echo $names->item ( )->nodeValue . '<br>'; //输出'张三'
为什么要进行两次取的Nodelist呢?请参照上图,因为有两个节点

demo.xml

<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="s101">
<name>zhangsan</name>
<age></age>
</person>
<person>
<name>wangwu</name>
<age></age>
</person>
</persons>

4. DOMNodeList类 (上面的person就是NodeList节点)

1、Length

当前节点列表中共有几个节点

2、DOMElement DOMNodelist::item ( int $index )

选中索引为index的节点

int $index:索引

5、 DOMNode类

1、nodeValue 节点的值

6、 关于属性的读取

1、bool DOMElement::hasAttribute ( string $name )

判断是否具有某个属性(只判断某个属性下有没有)

String $name:属性名

2、bool DOMNode::hasAttributes ( void )

判断是否具有属性(只要有属性就返回true)

3、string DOMElement::getAttribute ( string $name )

获取指定属性的属性值

String $name:属性名

示例2.用连贯操作输出

<?php
$dom = new DOMDocument ( '1.0', 'utf-8' );
$dom->load ( 'demo01.xml' );
// 想得到第一个人的姓名
echo $dom->getElementsByTagName ( 'person' )->item ( )
->getElementsByTagName ( 'name' )->item ( )->nodeValue;
输出:张三

Example3

<?php
header ( 'Content-Type:text/html;charset=gb2312' );
$dom = new DOMDocument ( '1.0', 'utf-8' );
$dom->load ( 'demo01.xml' );
$person = $dom->getElementsByTagName ( 'person' )->item ( );
// 判断节点是否具有id属性
if ($person->hasAttribute ( 'id' )) {
echo '具有id属性';
} else {
echo '没有id属性';
}
echo '<br>';
// 判断节点是否具有属性
if ($person->hasAttributes ()) {
echo '有属性';
} else {
echo '没有任何属性';
}
echo '<br>';
// 得到第一个person的id属性值
echo $person->getAttribute ( 'id' );

之前的例子只能得到一条数据,现在我想得到所有人的完整信息,该如何实现?

示例4:

如果<person id="s101">这种有属性的,也要遍历出来呢?

<?php
header ( 'content-type:text/html;charset=gb2312' );
$dom = new DOMDocument ( '1.0', 'utf-8' );
$dom->load ( 'demo01.xml' );
// 得到所有person节点
$persons = $dom->getElementsByTagName ( 'person' );
// 得到总人数
$count = $persons->length;
for($i = ; $i < $count; $i ++) {
// $person表示第i个人
$person = $persons->item ( $i );
echo '第' . ($i + ) . '个人的';
if ($person->hasAttribute ( 'id' )) {
echo '学号:' . $person->getAttribute ( 'id' );
}
echo '姓名:' . $person->getElementsByTagName ( 'name' )->item ( )->nodeValue;
echo '年龄:' . $person->getElementsByTagName ( 'age' )->item ( )->nodeValue;
echo '<br>';
}
?>

php中的XML DOM(10)的更多相关文章

  1. JavaScript 【 IE中的XML DOM 】

    IE中的 XML DOM 在统一的正式规范出来以前,浏览器对于XML的解决方案各不相同.DOM2级提出了动态创建XML DOM规范,DOM3进一步增强了XML DOM.所以,在不同的浏览器实现XML的 ...

  2. php中的XML DOM(11)

    7.创建节点 在dom操作中,增删改操作必须要找父节点 1.DOMElement DOMDocument::createElement ( string $name [, string $value ...

  3. javascript快速入门25--浏览器中的XML

    打开XML 首先,直接从浏览器中打开XML文件,浏览器会对其进行格式良好性检查,如果不符合XML语法规范则显示出错,如果格式良好,再检查是否包含样式表(CSS或XSL),如果包含样式表,则用样式表格式 ...

  4. DOM和SAX是应用中操纵XML文档的差别

    查看原文:http://www.ibloger.net/article/205.html DOM和SAX是应用中操纵XML文档的两种主要API.它们分别解释例如以下:          DOM.即Do ...

  5. Android中的XML解析

    在安卓中主要有三种XML文档解析方式:DOM(Document Object Model), SAX(Simple API for XML), PULL 他们的主要特点如下表:   特点 主要类 DO ...

  6. 第12章 在.NET中操作XML

    12.1 XML概述 12.1.1 为什么要有XML 12.1.2 XML文档结构 (1)文档声明 <?xml version="1.0"encoding="UTF ...

  7. 4.在浏览器中解析XML

    要在浏览器中解析获取XML数据,一般只需经过两个步骤:第一,将XML文档.XML字符串转化成XMLDoc对象.第二,使用JS操作XMLDoc对象. 3.1 将XML文档或XML字符串转化成XMLDoc ...

  8. Python使用xml.dom解析xml

    在菜鸟教程上找了个关于电影信息的xml类型的文档,用python内置的xml.dom来解析提取一下信息. 先复习一下xml概念: XML 指可扩展标记语言(EXtensible Markup Lang ...

  9. python 之模块之 xml.dom.minidom解析xml

    # -*- coding: cp936 -*- #python 27 #xiaodeng #python 之模块之 xml.dom.minidom解析xml #http://www.cnblogs.c ...

随机推荐

  1. Redis 基础操作

    [Redis 基础操作] 1.ECHO message. Returns message. 2.PHING Returns PONG if no argument is provided, other ...

  2. 词项邻近 & 停用词 & 词干还原

    [词项邻近] 邻近操作符(proximity)用于指定查询中的两个词项应该在文档中互相靠近,靠近程度通常采用两者之间的词的个数或者是否同在某个结构单元(如句 子或段落)中出现来衡量. [停用词] 一些 ...

  3. Shiro01 功能点框图、架构图、身份认证逻辑、身份认证代码实现

    基本功能点 功能点框图 功能点说明 1.Authentication:身份认证/登录,验证用户是不是拥有相应的身份: 2.Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个 ...

  4. FineUI学习

    1.无限级菜单绑定 using (DataTable dt = SqlPagerHelper.GetTableByCondition(DefaultConnection.ConnectionStrin ...

  5. win10 跳过max path 260限制

    参考: https://www.howtogeek.com/266621/how-to-make-windows-10-accept-file-paths-over-260-characters/ 注 ...

  6. 关于anroid设置webview背景方法探讨(转)

    最近的项目中一直关于webView设置背景色问题在研究,最终找到了解决的方法. 基于我项目的需求,从服务端传过来的是带有标签的文本,如果使用textView会让整个布局显得很乱,里面的<img ...

  7. sklearn.metrics import precision_recall_fscore_support

    二分类/多分类/多标签 对于二分类来说,必须定义一些matrics(f1_score,roc_auc_score).在这些case中,缺省只评估正例的label,缺省的正例label被标为1(可以通过 ...

  8. 万网上如何将IP和申请的域名绑定

    万网上如何将IP和申请的域名绑定   在万网上购买了域名后,怎么将它和指定的IP进行绑定呢?下面简单介绍下 工具/原料   中国万网账号 购买的域名 服务器 方法/步骤     百度万网,找到网站后, ...

  9. ACTIVITI 5.14事件监听器的BUG

    在ACTIVITI 5.14中,测试内部子流程时发现事件定义的事件监听器不能触发. <activiti:executionListener event="start" del ...

  10. Oracle学习笔记(八)

    十一.子查询 1.子查询概述 学习子查询的原因 事例:查询工资比SCOTT高的员工信息 思路:1.scott的工资 select sal from emp where ename='SCOTT'; 2 ...