首页 > 编程语言 >php中的XML DOM(10)

php中的XML DOM(10)

时间:2022-11-30 12:06:56浏览次数:33  
标签:XML 10 string dom echo person php 节点 属性

1.PHP DOM (1)

php中的XML DOM(10)_xml

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 ( 0 );
// 在这个person下获取name节点,返回的仍然是一个DOMNodeList类对象
$names = $person->getElementsByTagName ( 'name' );
// 输出姓名
echo $names->item ( 0 )->nodeValue . '<br>'; //输出'张三'
为什么要进行两次取的Nodelist呢?请参照上图,因为有两个节点

demo.xml

<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="s101">
<name>zhangsan</name>
<age>30</age>
</person>
<person>
<name>wangwu</name>
<age>18</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 ( 0 )
->getElementsByTagName ( 'name' )->item ( 0 )->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 ( 0 );
// 判断节点是否具有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:

php中的XML DOM(10)_xml_02

如果<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 = 0; $i < $count; $i ++) {
// $person表示第i个人
$person = $persons->item ( $i );
echo '第' . ($i + 1) . '个人的';
if ($person->hasAttribute ( 'id' )) {
echo '学号:' . $person->getAttribute ( 'id' );
}
echo '姓名:' . $person->getElementsByTagName ( 'name' )->item ( 0 )->nodeValue;
echo '年龄:' . $person->getElementsByTagName ( 'age' )->item ( 0 )->nodeValue;
echo '<br>';
}
?>

 

源码面前,了无秘密



标签:XML,10,string,dom,echo,person,php,节点,属性
From: https://blog.51cto.com/zhenghongxin/5898192

相关文章

  • WebService-php- 2(17)
    wsdl实例<?xmlversion='1.0'encoding='UTF-8'?><definitionstargetNamespace='http://localhost/00/'xmlns:tns='http://localhost/00/'xmlns:soap='http://schemas.xm......
  • 在线编辑器Ckeditor (1) - php (30)
    在线编辑器在线编辑器也称之为所见即所得编辑器,是一种常见的html源码编辑器。所见即所得:用户在输入的时候,不论是格式和是样式都能被系统原封不动的保存,最后在查看的时候,可以......
  • 在线编辑器Ckeditor (2) - php (31)
    接上一篇3in-page(页内)配置,在使用Ckeditor的界面里进行直接配置页内配置效果 特点:配置项完全属于某个特定的Ckeditor实例,不可重用三种配置方式比较定制方式特点说明优先......
  • PHP设计超级好用的文件上传处理类一 (37)
    <?phpclassFileUpload{private$filepath;//指定上传文件保存的路径private$allowtype=array('gif','jpg','png','jpeg');//充许上传文件......
  • PHP设计日历类一 (38)
    由两个文件组成:第一个test.php<style>table{border:1pxsolid#050;}.fontb{color:white;background:blue;}th{......
  • Thinkphp入门 四 —布局、缓存、系统变量 (48)
    【控制器操作方法参数设置】​​http://网址/index.php/控制器/操作方法​​  【页面跳转】【变量调节器】Smarty变量调节器TP变量调节器:普通的php函数(count strlen ......
  • 十二生肖查询网页版制作(php)
    今天无聊做了一个十二生肖查询器:预览网址效果:​​http://hongxing01.hktd02u.me48.com/03Sxcx​​源代码下载:​​http://down.51cto.com/data/1985014​​这个Demo的学习很......
  • MySQL 报 1045 错误解决方法
    MySQL报1045错误解决方法 大炮运维V587发表在Linux面板2019-11-1815:58[复制链接]3115803MySQL在使用root密码登陆报  1045  ERROR1045(2800......
  • 10个 JavaScript 开发小技巧
    英文| https://www.geeksforgeeks.org/javascript-top-10-tips-and-tricks/?ref=rp翻译|web前端开发(ID:web_qdkf)对于Web开发或跨平台开发,JavaScript越来越流行。以前,它......
  • 第10章 使用 Kotlin 创建 DSL
    第10章使用Kotlin创建DSL使用DSL的编程风格,可以让程序更加简单干净、直观简洁。当然,我们也可以创建自己的DSL。相对于传统的API,DSL更加富有表现力、更符合人类语言习......