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>