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 根节点 + 多个子节点
根节点下直接包含多个平级子节点(同级子节点可以重名,代表同类数据)。
- 示例:
根节点包含 2 个 子节点:
<?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>