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

<![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:

<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 来添加子节点,看图:

添加节点:

最后还有一个asXML的操作,也就是把这个修改给加到XML文档中去。

总体来说,就是创建一个变量获取(接收)XML文档,然后修改,再把这个变量给返回到XML文档中去。


四:Xpath语言

Xpath:他是专门用来查找XML数据内容的一门语言,对XML元素以及属性进行遍历。

比如说要想找到一个XML文档中的所有user属性的值,直接用Xpath函数:

xpath('路径')

绝对查找

(这里是 / 开头的绝对查找)

<?php
$q = simplexml_load_file('z.xml');
$w = $q->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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/462828.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解:模板设计模式

模板设计模式&#xff08;Template Pattern&#xff09;是一种行为设计模式&#xff0c;在软件设计中有着广泛的应用&#xff0c;旨在提高代码的可维护性和可复用性。 一、定义与特点 定义&#xff1a; 模板设计模式定义了一个算法的骨架&#xff0c;将某些步骤推迟到子类中实…

《向量数据库指南》——RAG质量评估与监控,打造高效AI引擎

嘿,各位向量数据库的小伙伴们,我是你们的老朋友王帅旭,大禹智库的向量数据库高级研究员,也是那本被大家津津乐道的《向量数据库指南》的作者。今天咱们来聊聊一个特别重要但又经常被忽视的话题——质量评估与监控,这可是确保咱们RAG(检索增强生成)系统稳定高效运行的关键…

Verilog HDL基础

模块的基本结构 module 模块名(端口列表); // 模块声明// 端口定义input [数据类型] [位宽] 输入端口列表; output [数据类型] [位宽] 输出端口列表; inout [数据类型] [位宽] 双向端口列表; // 数据类型定义wire [位宽] 线网名,线网名&#xff0c;…; …

HarmonyOS NEXT 应用开发实战(九、知乎日报项目详情页实现详细介绍)

在本篇博文中&#xff0c;我们将探讨如何使用 HarmonyOS Next 框架开发一个知乎日报的详情页&#xff0c;逐步介绍所用到的组件及代码实现。知乎日报是个小巧完整的小项目&#xff0c;这是一个循序渐进的过程&#xff0c;适合初学者和有一定开发经验的工程师参考。 1. 项目背景…

SpringBoot+FileBeat+ELK8.x版本收集日志

一、准备环境 1、ElasticSearch&#xff1a;8.1.0 2、FileBeat&#xff1a;8.1.0 3、Kibana&#xff1a;8.1.0 4、logstach&#xff1a;8.1.0 本次统一版本&#xff1a;8.1.0,4个组件&#xff0c;划分目录&#xff0c;保持版本一致。 说明&#xff1a;elasticsearch和kib…

UML介绍-不同类间关系

目录 不同的类间关系有着各自独特的体现方式。 继承关系 实现关系 关联关系 聚合关系 组合关系 数据库建模PowerDesigner UML&#xff08;Unified Modeling Language&#xff09;即统一建模语言&#xff0c;是一种用于软件系统分析、 设计和文档编制的可视化建模语言。…

C语言 | Leetcode C语言题解之第528题按权重随机选择

题目&#xff1a; 题解&#xff1a; typedef struct {int* pre;int preSize;int total; } Solution;Solution* solutionCreate(int* w, int wSize) {Solution* obj malloc(sizeof(Solution));obj->pre malloc(sizeof(int) * wSize);obj->preSize wSize;obj->total…

Yocto 项目中 layer.conf 文件的基本框架与模版

一个在layer.conf文件的基本框架&#xff1a; # 层的名称&#xff0c;可自定义&#xff0c;用于标识该层 LCONF_VERSION "7" LAYERNAME "my_layer"# 层的优先级&#xff0c;整数&#xff0c;用于确定层在构建顺序中的位置 # 数字越大&#xff0c;优先级…

计算机毕业设计Hadoop+大模型地震预测系统 地震数据分析可视化 地震爬虫 大数据毕业设计 Spark 机器学习 深度学习 Flink 大数据

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (1) - 让 OpenGLES 应用跑起来

在正式移植 AWTK 之前&#xff0c;我们先尝试在 HarmonyOS 上运行一个简单的 OpenGLES 应用程序。虽然可以确定这一步肯定是可行的&#xff0c;但是作为一个 HarmonyOS NEXT 新手&#xff0c;还是先从简单的应用程序开始&#xff0c;把坑都踩一遍&#xff0c;遇到问题比较好解决…

Node.js:内置模块

Node.js&#xff1a;内置模块 Node.jsfs模块读取文件写入文件__dirname path模块路径拼接文件名解析 http模块创建服务 Node.js 传统的JavaScript是运行在浏览器的&#xff0c;浏览器就是其运行环境。 浏览器提供了JavaScript的API&#xff0c;以及解析JavaScript的解析引擎&a…

《Web性能权威指南》-WebRTC-读书笔记

本文是《Web性能权威指南》第四部分——WebRTC的读书笔记。 第一部分——网络技术概览&#xff0c;请参考网络技术概览&#xff1b; 第二部分——无线网络性能&#xff0c;请参考无线网络性能&#xff1b; 第三部分——HTTP&#xff0c;请参考HTTP&#xff1b; 第四部分——浏览…

vscode ssh连接autodl失败

autodl服务器已开启&#xff0c;vscode弹窗显示连接失败 0. 检查状态 这里的端口和主机根据自己的连接更改 ssh -p 52165 rootregion-45.autodl.pro1. 修改config权限 按返回的路径找到config文件 右键--属性--安全--高级--禁用继承--从此对象中删除所有已继承的权限--添加…

HTML 基础标签——多媒体标签<img>、<object> 与 <embed>

文章目录 1. `<img>` 标签主要属性示例注意事项2. `<object>` 标签概述主要属性示例注意事项3. `<embed>` 标签概述主要属性示例注意事项小结在现代网页设计中,多媒体内容的使用变得越来越重要,因为它能够有效增强用户体验、吸引注意力并传达信息。HTML 提…

Android——横屏竖屏

系统配置变更的处理机制 为了避免横竖屏切换时重新加载界面的情况&#xff0c;Android设计了一中配置变更机制&#xff0c;在指定的环境配置发生变更之时&#xff0c;无需重启活动页面&#xff0c;只需执行特定的变更行为。该机制的视线过程分为两步&#xff1a; 修改 Androi…

宝塔使用clickhouse踩坑

前言 最近有个物联网项目&#xff0c;需要存储物联网终端发送过来的信息&#xff08;类似log日志&#xff0c;但又要存储在数据库里&#xff0c;方便后期聚合统计&#xff09;&#xff0c;本来想写文件的奈何客户要求聚合统计&#xff0c;所以只能用数据库才能达到更高的计算效…

探索Python新境界:Buzhug库的神秘面纱

文章目录 探索Python新境界&#xff1a;Buzhug库的神秘面纱第一部分&#xff1a;背景介绍第二部分&#xff1a;Buzhug库是什么&#xff1f;第三部分&#xff1a;如何安装Buzhug库&#xff1f;第四部分&#xff1a;Buzhug库函数使用方法第五部分&#xff1a;Buzhug库使用场景第六…

跨越科技与文化的桥梁——ROSCon China 2024 即将盛大开幕

在全球机器人技术飞速发展的浪潮中&#xff0c;ROS&#xff08;Robot Operating System&#xff09;作为一款开源的机器人操作系统&#xff0c;已成为无数开发者、研究人员和企业的首选工具。为了进一步推动ROS的应用与发展&#xff0c;全球知名的机器人操作系统会议——ROSCon…

ZDS 数字股票 布局全球视野,开启智能金融新篇章

在全球金融市场蓬勃发展的背景下&#xff0c;Zeal Digital Shares&#xff08;ZDS&#xff09;正迈向一个全新的发展阶段。通过采用先进技术与深度融合人工智能&#xff08;AI&#xff09;&#xff0c;ZDS 吸引了各类顶尖人才&#xff0c;不仅推动了创新金融服务的建设&#xf…

Python酷库之旅-第三方库Pandas(190)

目录 一、用法精讲 881、pandas.Index.is_方法 881-1、语法 881-2、参数 881-3、功能 881-4、返回值 881-5、说明 881-6、用法 881-6-1、数据准备 881-6-2、代码示例 881-6-3、结果输出 882、pandas.Index.min方法 882-1、语法 882-2、参数 882-3、功能 882-4、…