1. xml的基本结构
XML(可扩展标记语言,eXtensible Markup Language)是一种用于存储和传输结构化数据的标记语言,核心特点是自定义标签和严格的语法规则.
一个合法的 XML 文档必须包含文档声明和唯一根元素
<?xml version="1.0" encoding="UTF-8"?> <!-- 文档声明(可选但推荐) -->
<root> <!-- 唯一根元素(必须) -->
<child1 attribute="value">内容1</child1> <!-- 子元素(可嵌套) -->
<child2>内容2</child2>
</root>2.XML 根节点的核心规则
XML 文档有且只能有一个根节点,所有其他节点(子节点、孙节点等)都必须是根节点的后代。这是 XML 语法的强制要求,违反会导致文档无法被解析。
- 错误示例(多个根节点):
以下文档包含 两个根节点,解析器会报错:
<?xml version="1.0"?>
<users> <!-- 第一个根节点 -->
<user>张三</user>
</users>
<products> <!-- 第二个根节点(错误) -->
<product>手机</product>
</products>- 正确示例(唯一根节点):
用 作为唯一根节点,包含所有其他节点:
<?xml version="1.0"?>
<data> <!-- 唯一根节点 -->
<users> <!-- 子节点 -->
<user>张三</user>
</users>
<products> <!-- 子节点 -->
<product>手机</product>
</products>
</data>3.子节点的设置规则(多层嵌套)
在唯一根节点下,可以设置任意数量的子节点,且子节点可以嵌套自己的子节点(孙节点).
“根节点→子节点→孙节点→…” 的树状结构。
核心规则是:子节点必须完全嵌套在父节点内,不能交叉嵌套。
3.1 根节点 + 多个子节点
根节点下直接包含多个平级子节点(同级子节点可以重名,代表同类数据)。
- 示例:
根节点 子节点:
<?xml version="1.0"?>
<school> <!-- 根节点 -->
<!-- 子节点1 -->
<class id="1">
高一(1)班
</class>
<!-- 子节点2(与子节点1平级) -->
<class id="2">
高一(2)班
</class>
</school>3.2 子节点中的子节点(多层嵌套)
子节点可以包含自己的子节点(孙节点),孙节点还可以包含更深层次的节点,层级数量没有限制
- 示例:
根节点 :
<?xml version="1.0"?>
<school> <!-- 根节点 -->
<class id="1"> <!-- 子节点(父节点) -->
<student> <!-- 孙节点(子节点的子节点) -->
<name>张三</name> <!-- 曾孙节点 -->
<age>18</age> <!-- 曾孙节点 -->
</student>
<student> <!-- 另一个孙节点 -->
<name>李四</name>
<age>17</age>
</student>
</class>
<class id="2"> <!-- 另一个子节点 -->
<student>
<name>王五</name>
<age>18</age>
</student>
</class>
</school>3.3 子节点的属性与文本
子节点可以包含属性(附加信息)和文本内容,规则与根节点一致:
- 属性需用引号包裹(单引号或双引号);
- 文本中的特殊字符(如 <、&)需转义或用 CDATA 段包裹。
<?xml version="1.0"?>
<bookstore> <!-- 根节点 -->
<book id="101" category="编程"> <!-- 子节点(含属性) -->
<title>XML 教程</title> <!-- 孙节点(文本内容) -->
<price>59.9</price> <!-- 孙节点 -->
<description>
<![CDATA[包含 < 符号和 & 符号的内容]]> <!-- CDATA 段处理特殊字符 -->
</description>
</book>
</bookstore>xml 示例
<REFCTRL Ver="1.0.0">
<!-- 关键修复:将自闭合标签`<node/>`改为双标签`<node></node>`,以包含子节点`<sub_node>` -->
<!-- 自闭合标签(无子女点),语法正确 -->
<para>
<node name="年龄" value="22" />
</para>
<point>
<node name="性别" main="1"/>
<node name="体重" main="50">
<sub_node name="小马" main="23"/>
<sub_node name="小龟" main="34"/>
</node>
</point>
</REFCTRL>
















