xml

204 阅读2分钟

XML 基础认知

什么是XML

  • XML指的是可扩展性标记语言
  • XML被发明的目的是传输和存储数据,而不是展示数据
  • XML的标签必须自定义,但是在写标签名的时候一定要有含义

自定义一段XML数据

<!-- 文件名后缀必须为 xml -->
<!-- 所有的xml文件必须有一个根节点/根标签 此文件中根节点为<root></root> -->
<!-- 可以在浏览器打开 鼠标右键 - Open With Live Serve -->
<root> 
<user>熊熊丽</user>
<msg>一名小学生</msg>
</root>

浏览器打开后的结果: image.png

XML和HTML的区别(重点)

  • HTML为预定标签,标签不能自定义,XML必须(只能)自定义
  • HTML语法要求不严格,XML语法要求极其严格(标签必须成对)
  • HTML用来传输和存储数据,HTML用来展示数据

XML的基本语法

语法规则

  • XML必须有根节点,根节点是所有节点的父级节点
  • XML头声明,不强求,可有可无,但建议必须写
    • <?xml version="1.0" encoding="utf-8" ?>
  • 所有XML元素都必须是成对标签
  • 标签名大小写敏感(区分大小写)
  • 标签不能交叉书写:
    • <a>AAA<b>BBB<a><b> -- 错误的,不可以交叉
  • XML注释和HTML注释一致
  • XML遇到特殊字符使用实体转义,XML有5个特殊字符
符号实体
<&lt;
>&gt;
&&amp;
'&apos;
"&quot;

XML元素属性

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

XML中属性 可以使用,但是最好不去使用,因为在解析XML数据时,属性会带来额外的解析代码(多了一步比较麻烦)

属性规则:

  1. 一个标签可以有多个属性,属性的值必须使用引号引起来
  2. 属性命名规则:数字字母下划线,数字不能开头
<root>
    <man>
        <name>金星</name>
        <age>36</age>
    </man>
    <man>
        <name age="38">太白</name>
    </man>
</root>

CDATA

语法:<![CDATA[...不需要解析的内容]]>

<?xml version="1.0" encoding="utf-8" ?>
<root>
    <title>数学题:</title>
    <msg>如果 2 &lt; 4 , 那么请证明5 &gt; 3;</msg>
    <msg><![CDATA[如果 2 < 4 , 那么请证明5 > 3;]]></msg>
</root>

image.png

解析

PHP解析

<?php
// file_get_contents("04.xml")  // 用于读取普通文件
$x = simplexml_load_file("04.xml") // simplexml_load_file专门用于读取xml文件
// simplexml_load_file解析xml文档,返回php对象
var_dump($x); // 输出$x

echo $x->man[0]->name; // 输出第一个name标签的值

PHP解析并遍历


// 遍历 循环获取XML数据
// way - 1
foreach($x->man as $v){
    echo $v->name;
}
// way - 2
$c = count($x->man);
for($i=0;$i<$c;$i++){
    echo $x->man[$i]->name;
}

PHP添加节点

// XML 添加节点
// 对象中的addChild方法创建节点
$man = $x->addChild('man'); 
// 对象中的addChild方法创建节点并给创建后的节点添加内容
$man->addChild('name','玉帝');
$man->addChild('age','999'); 

var_dump($x);
// 将添加后的对象重新解析成XML文档,写入文件
$x->asXML("04.xml");

js解析

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // 假设我们有如下XML字符串
    var xmlString = '<root><element attr="value">Text</element></root>';
    
    // 使用DOMParser解析XML字符串
    var parser = new DOMParser();
    var xmlDoc = parser.parseFromString(xmlString, 'text/xml');
    console.log(xmlDoc);
    
    // 获取解析后的XML文档的元素
    var element = xmlDoc.getElementsByTagName('element')[0];
    
    // 访问元素的文本内容
    console.log(element.textContent); // 输出: Text
    
    // 访问元素的属性
    console.log(element.getAttribute('attr')); // 输出: value
</script>
</html>

image.png