XML详解二XML的解析与创建
XML用来传输和存储数据,如何解析获取到的XML文本呢?
一.解析XML
创建demo.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book book_id="1">
<title>php</title>
<author>php入门到放弃</author>
</book>
<book book_id="2">
<title>java</title>
<author>java入门到放弃</author>
</book>
<book book_id="3">
<title>C</title>
<author>C入门到放弃</author>
</book>
</bookstore>
使用PHP解析demo.xml中的内容,以获取到php这个文本节点为例:
<?php
/*思路:1.先载入xml文档 2.获取节点列表对象 3.获取子节点对象 4.获取子节点列表对象 5.获取文本对象 如果层级比较深就是循环2-4步,先拿列表对象,再拿子节点对象...*/ $dom = new DOMDocument('1.0','UTF-8');
//print_r($dom); //DOMDocument Object $dom->load('demo.xml'); //载入要解析的xml文档 $titleList = $dom->getElementsByTagName('title'); ////DOMNodeList Object ( [length] => 3 ) 获取节点列表对象 $title = $titleList->item(0); //DOMElement Object 获取子节点对象 $title = $title->childNodes; //DOMNodeList Object ( [length] => 1 )获取子节点列表对象 $title = $title->item(0); //DOMText Object 获取到文本对象 $text = $title->wholeText; //获取到文本内容 echo $text; //php
echo '<br>'; //也可以直接写成连贯操作:
$text = $dom->getElementsByTagName('title')->item(0)->childNodes->item(0)->wholeText; echo $text; //php
echo '<br>'; //第二种方法:
$text = $dom->getElementsByTagName('title')->item(0)->nodeValue; //获取到文本内容
echo $text; //php
除了解析之外,还可以对xml节点进行删除和替换操作:
$dom = new DOMDocument('1.0','UTF-8');
$dom->load('demo.xml'); //载入要解析的xml文档
/**
*xml删除节点
* */
$php = $dom->getElementsByTagName('book')->item(0); //获取文本节点
$php->parentNode->removeChild($php); //获取文本节点的父节点,然后站在父节点的立场删除子文本节点
/**
* xml替换节点
* */
$java = $dom->getElementsByTagName('title')->item(0); //获取要替换的文本节点
$newnode = $dom->createTextNode('python'); //创建新的文本节点
$java->replaceChild($newnode,$java->firstChild); //用新节点替换旧文本节点内容
header("content-type:text/xml");
echo $dom->saveXML(); //直接输出xml文本
二.创建XML
使用PHP创建一个如下的XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book book_id="1">
<title>php</title>
<author><![CDATA[PHP是世界上最好的编程语言.emmm...]]></author>
</book>
</bookstore>
PHP代码:
<?php
$dom = new DOMDocument('1.0','UTF-8'); $text = $dom->createTextNode('php'); //创建文本节点 $title = $dom->createElement('title'); //创建普通节点 $title->appendChild($text); //将文本节点作为子节点添加到普通节点内 $cdata = $dom->createCDATASection('PHP是世界上最好的编程语言.emmm...'); //创建CDATA节点 $author = $dom->createElement('author'); //创建普通节点 $author->appendChild($cdata); //将CDATA节点作为子节点添加到普通节点内 $book = $dom->createElement('book'); //创建普通节点 //将上面创建的两个普通节点作为子节点添加到普通节点内
$book->appendChild($title);
$book->appendChild($author); $book_id = $dom->createAttribute('book_id'); //创建属性名
$book_id->value = '1'; //创建属性值 $book->appendChild($book_id); //将属性加到普通节点内 $bookstore = $dom->createElement('bookstore'); //创建普通节点
$bookstore->appendChild($book); //将普通节点作为子节点添加到普通节点内 $dom->appendChild($bookstore); //将普通节点添加到文档内 // header("content-type:text/xml");
// echo $dom->saveXML(); //直接输出xml文本 echo $dom->save('demo.xml'); //生成xml文件
在浏览器输出如下图:

XML详解二XML的解析与创建的更多相关文章
- Struts2初学 Struts.xml详解二
A.使用继承实现设置全局视图 package节点中还可以设置全局的视图,如: <global-results> <result name="e ...
- XML详解一XML语法
XML指可扩展标记语言很类似 HTML,被设计用来传输和存储数据而非显示数据,XML标签没有被预定义需要自行定义标签,标签具有自我描述性,同时XML也是 W3C 的推荐标准. 先来写一个XML脚本de ...
- Maven配置文件setting.xml详解
注:本文来源于:大话JAVA的那些事 <Maven配置文件setting.xml详解> <?xml version="1.0" encoding="UT ...
- Tomcat配置(二):tomcat配置文件server.xml详解和部署简介
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- Tomcat(二):tomcat配置文件server.xml详解和部署简介
Tomcat系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1. 入门示例:虚拟主机提供web服务 该示例通过设置虚拟主机来提供web服务 ...
- Web.xml详解(转)
这篇文章主要是综合网上关于web.xml的一些介绍,希望对大家有所帮助,也欢迎大家一起讨论. ---题记 一. Web.xml详解: (一) web.xml加载过程(步骤) 首 ...
- logback的使用和logback.xml详解,在Spring项目中使用log打印日志
logback的使用和logback.xml详解 一.logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch.它当前分 ...
- 转载 logback的使用和logback.xml详解 http://www.cnblogs.com/warking/p/5710303.html
logback的使用和logback.xml详解 一.logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch.它当前 ...
- Maven全局配置文件settings.xml详解(转)
Maven全局配置文件settings.xml详解 目录 一.概要 1.settings.xml的作用2.settings.xml文件位置3.配置的优先级 二.settings.xml元素详解 1 ...
随机推荐
- 【Spark篇】---SparkSQL初始和创建DataFrame的几种方式
一.前述 1.SparkSQL介绍 Hive是Shark的前身,Shark是SparkSQL的前身,SparkSQL产生的根本原因是其完全脱离了Hive的限制. SparkSQL支持查询原 ...
- Python爬虫入门教程 19-100 51CTO学院IT技术课程抓取
写在前面 从今天开始的几篇文章,我将就国内目前比较主流的一些在线学习平台数据进行抓取,如果时间充足的情况下,会对他们进行一些简单的分析,好了,平台大概有51CTO学院,CSDN学院,网易云课堂,慕课网 ...
- Error: Cannot fit requested classes in a single dex file (# methods: 149346 > 65536)
引用第三方库的jar文件,都有可能会触发这个错误.解决方案如下: 参考<[Android]Cannot fit requested classes in a single dex file. T ...
- 利用好浏览器的空闲时间 --- requestIdleCallback
页面流畅与 FPS 页面是一帧一帧绘制出来的,当每秒绘制的帧数(FPS)达到 60 时,页面是流畅的,小于这个值时,用户会感觉到卡顿. 1s 60帧,所以每一帧分到的时间是 1000/60 ≈ 16 ...
- Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(三):搭建jenkins集群环境
写在前面 大家可以看到本文的配图,左边是jenkins单机环境,右边是jenkins集群.个中区别,不言而喻,形象生动. 前面我分别介绍了.net core 程序的多种部署方式(无绝对孰优孰劣): 1 ...
- navicat连接mysql出现Client does not support authentication protocol requested by server解决方案
USE mysql; '; FLUSH PRIVILEGES; root是用户名 localhost是ip地址127.0.0.1都是特指本机,%表示任何IP都可访问 mysql_native_pass ...
- 编写基于Property-based的单元测试
编写基于Property-based的单元测试 作为一个开发者,你可能认为你的职责就是编写代码从而完成需求.我不敢苟同,开发者的工作是通过软件来解决现实需求,编写代码只是软件开发的其中一个方面,编写可 ...
- leetcode — pascals-triangle
import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Source : https://o ...
- Perl获取主机名、用户、组、网络信息
获取主机名.用户.组.网络信息相关函数 首先是获取主机名的方式,Perl提供了Sys::Hostname模块,可以查询当前的主机名: use Sys::Hostname; print hostname ...
- 记录:C++类内存分布(虚继承与虚函数)
工具:VS2013 先说一下VS环境下查看类内存分布的方法: 先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到所有相关类的内存 ...