XML标记语言

最近在学XXE-XML外部实体注入漏洞时候,浅浅学习了一下XML,谨做此学习笔记。


目录

一:XML概述

二:XML语法

XML中的CDATA

三:使用PHP解析XML文档

添加节点

四:Xpath语言

绝对查找

相对查找

使用*匹配

条件,匹配查找


一:XML概述

XML:可扩展性标记语言

(HTML是超文本标记语言,XML和HTML极为相似)

下面是一段标准的XML数据格式:

(不同浏览器上展示形式可能不同)

XML数据格式最主要的功能就是数据传输

XML也可以用作配置文件,如:config.xml pom.xml

XML也可以存储数据,充当小型数据库

XML被发明的目的是传输和存储数据,而不是展示数据(HTML是展示数据)

XML标签必须自定义,必须有一个根节点<root></root>(不是root也行,也可以自定义),而且它是W3C推举的数据传输格式。


二:XML语法

XML语法要求极其严格:

1.必须有根节点。

2.XML的头声明:可有可无,但是建议写上。

<?xml version="1.0" encoding="utf-8"?>

3.所有标签都必须成对出现,没有HTML中的单标签。

4.大小写敏感。

5.标签不能交叉,XML的注释和HTML是一样的。

6.特殊字符需要实体转义:

XML属性:就是表示标签自身的一些额外信息

一个标签可以有多个属性,属性的值必须使用引号引起来;

命名规则:数字字母下划线,数字不能开头;

还有,在解析数据时,属性会带来额外的解析代码(多了一步,比较麻烦);所以属性就是鸡肋(食之无肉,弃之有味);

XML中的CDATA

当有一段文本包含很多特殊字符时候,这个时候一个一个转成实体过于麻烦,所以我们可以使用XML中的CDATA

XML 复制代码
<![CDATA[这里是文本内容]]>

三:使用PHP解析XML文档

在 PHP5版本以后,提供了一个非常非常强大的类库,SimpleXML类库,专门用于实现对XML文档的解析操作。

通过使用simplexml_load_file() 这个函数来解析XML文档,返回PHP对象:

会返回一个数组形式(键值对)的冬冬:(根节点root是不解析的)

object(SimpleXMLElement)#1 (3)

{ ["id"]=> string(3) "num" ["user"]=> string(5) "he11o" ["qw"]=> string(9) "good girl" }

并且可以通过echo $q->user 来获取到对应的字符串

PHP 解析XML共分为3步:

  1. 读取文档到内存
  2. 形成 DOM树
  3. 由 DOM树生成对象并返回.

解析其中,如果有相同的标签名,就会转为数组,XML中的标签作为了PHP中的属性,XML标签中的内容作为PHP属性值。

这个其实自己试试理解更为深刻。。

XML:

XML 复制代码
<root>
<man>
<id>num</id>
<user>he11o</user>
<qw>good girl</qw>
</man>
</root>

PHP返回到页面:

object(SimpleXMLElement)#1 (1)

{ ["man"]=> object(SimpleXMLElement)#2 (3)

{

"id"\]=\> string(3) "num" \["user"\]=\> string(5) "he11o" \["qw"\]=\> string(9) "good girl" } } 可以使用for循环或者foreach来遍历XML数据。 #### 添加节点 首先还是拿simplexml_load_file() 获取到XML文档 然后可以用addChild()函数给获取到的 $q 来添加子节点,看图: ![](https://i-blog.csdnimg.cn/direct/4a8f964b7f3f497eb34e14746044c527.png) 添加节点: 最后还有一个asXML的操作,也就是把这个修改给加到XML文档中去。 总体来说,就是创建一个变量获取(接收)XML文档,然后修改,再把这个变量给返回到XML文档中去。 *** ** * ** *** ### 四:Xpath语言 Xpath:他是专门用来查找XML数据内容的一门语言,对XML元素以及属性进行遍历。 比如说要想找到一个XML文档中的所有user属性的值,直接用Xpath函数: > xpath('路径') #### 绝对查找 (这里是 / 开头的绝对查找) ```php xpath('/root/man/user'); var_dump($w); ?> ``` Xpath查找后仍然返回的是数组,每一个值仍是一个对象。 #### 相对查找 > $w = $q-\>xpath('//user'); 注意这里是双杠 > > 意为寻找XML文档里所有user属性的值 #### 使用\*匹配 > 比如: //man/\* 意为man下面的所有节点都找到 #### 条件,匹配查找 > //man\[age\>10\] age为man中的子节点(子标签) > > //man\[last()\] 拿到man节点下的最后一个节点值 > > //man\[@msg\] 查找man节点下的有msg属性的所有节点 总结如有不当之处,欢迎大家批评指正! ヾ(•ω•\`)o ヾ(•ω•\`)o

相关推荐
武子康1 天前
Java-39 深入浅出 Spring - AOP切面增强 核心概念 通知类型 XML+注解方式 附代码
xml·java·大数据·开发语言·后端·spring
Ll13045252983 天前
基于 COM 的 XML 解析技术(MSXML) 的总结
xml
在代码的海洋中寻找亚特兰蒂斯3 天前
AJAX对于XML和JSON的处理
xml·ajax·json
BinField5 天前
ToolsSet之:XML工具
xml·windows·microsoft
SEO-狼术5 天前
Connect Directly to Oracle XML Data
xml·数据库·oracle
YSoup5 天前
2025年目前最新版本Android Studio自定义xml预览的屏幕分辨率
android·xml·android studio
abcnull7 天前
mybatis的mapper对应的xml写法
xml·sql·spring·mybatis·mapper
Blue桃之夭夭7 天前
HTML、XML、JSON 是什么?有什么区别?又是做什么的?
xml·html·json
小于村7 天前
pom.xml 文件中配置你项目中的外部 jar 包打包方式
xml·java·jar
扶风呀7 天前
pom.xml中标签详解_
xml