php中的XML DOM(10)
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)的更多相关文章
- JavaScript 【 IE中的XML DOM 】
IE中的 XML DOM 在统一的正式规范出来以前,浏览器对于XML的解决方案各不相同.DOM2级提出了动态创建XML DOM规范,DOM3进一步增强了XML DOM.所以,在不同的浏览器实现XML的 ...
- php中的XML DOM(11)
7.创建节点 在dom操作中,增删改操作必须要找父节点 1.DOMElement DOMDocument::createElement ( string $name [, string $value ...
- javascript快速入门25--浏览器中的XML
打开XML 首先,直接从浏览器中打开XML文件,浏览器会对其进行格式良好性检查,如果不符合XML语法规范则显示出错,如果格式良好,再检查是否包含样式表(CSS或XSL),如果包含样式表,则用样式表格式 ...
- DOM和SAX是应用中操纵XML文档的差别
查看原文:http://www.ibloger.net/article/205.html DOM和SAX是应用中操纵XML文档的两种主要API.它们分别解释例如以下: DOM.即Do ...
- Android中的XML解析
在安卓中主要有三种XML文档解析方式:DOM(Document Object Model), SAX(Simple API for XML), PULL 他们的主要特点如下表: 特点 主要类 DO ...
- 第12章 在.NET中操作XML
12.1 XML概述 12.1.1 为什么要有XML 12.1.2 XML文档结构 (1)文档声明 <?xml version="1.0"encoding="UTF ...
- 4.在浏览器中解析XML
要在浏览器中解析获取XML数据,一般只需经过两个步骤:第一,将XML文档.XML字符串转化成XMLDoc对象.第二,使用JS操作XMLDoc对象. 3.1 将XML文档或XML字符串转化成XMLDoc ...
- Python使用xml.dom解析xml
在菜鸟教程上找了个关于电影信息的xml类型的文档,用python内置的xml.dom来解析提取一下信息. 先复习一下xml概念: XML 指可扩展标记语言(EXtensible Markup Lang ...
- python 之模块之 xml.dom.minidom解析xml
# -*- coding: cp936 -*- #python 27 #xiaodeng #python 之模块之 xml.dom.minidom解析xml #http://www.cnblogs.c ...
随机推荐
- JDK动态代理代码示例
JDK动态代理代码示例 业务接口 实现了业务接口的业务类 实现了InvocationHandler接口的handler代理类 1.业务接口 package com.wzq.demo01; /** * ...
- fekit 搭建
sudo apt-get install npmsudo apt-get install nodejs 保证npm配置正确 sudo npm config set registry http://r ...
- hive 建表导入数据
1. hive> create table wyp > (id int, name string, > age int, tel string) > ROW FORMAT DE ...
- 新手C#构造函数、继承、组合的学习2018.08.06/07
构造函数,是一种特殊的方法.主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中.特别的一个类可以有多个构造函数,可根据其参数个数的不同或参数类型的不同 ...
- 在VMware Workstation中安装Ubuntu Server 16.04.5图解教程
最近要在Ubuntu中部署openstack,为了节省空间和内存,最终选择了Ubuntu服务器.看了很多前辈和大佬的安装教程,在这里记录一下我自己的Ubuntu Server 16.04.5的安装过程 ...
- jQuery学习之jQuery Ajax用法详解(转)
jQuery Ajax在web应用开发中很常用,它主要包括有ajax,get,post,load,getscript等等这几种常用无刷新操作方法,下面我来给各位同学介绍介绍. 我们先从最简单的方法看起 ...
- docker1.9 network跨主机安装
背景:在跨host中,如果docker任何一个重启或者销毁,docker暴露的端口以及ip将可能重新配置,这个时候需要重新记录ip跟端口.在生产环境中往往需要一个固定的ip以及端口去跟容器通信.例如m ...
- 2018年3大UI设计趋势,你知道吗?
以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 之前小编已经和大家讨论了2018年软件测试的五大趋势,现在让我们一起来看看移动UI设计在2018年会 ...
- RocketMQ runbroker.sh 分析JVM启动参数
runbroker.sh #====================================================================================== ...
- cron.c
/* $OpenBSD: cron.c,v 1.39 2007/02/18 23:59:03 jmc Exp $ */ /* Copyright 1988,1990,1993,1994 by Paul ...