前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >配置文件格式 XML 快速上手

配置文件格式 XML 快速上手

作者头像
恋喵大鲤鱼
发布2024-07-21 08:12:38
160
发布2024-07-21 08:12:38
举报
文章被收录于专栏:C/C++基础

XML(Extensible Markup Language)是可扩展标记语言,用来传输和存储数据。因为其允许用户自定义标记名称,具有自我描述性,可灵活地用于存储服务配置信息。

1.语法

XML 文档结构是一种树结构,它从“根部”开始,然后扩展到“枝叶”。XML 文档必须有一个唯一的根结点,根结点包含所有其它结点。所有结点均可拥有文本内容和属性(名称/值的对)。XML 结点也叫做 XML 元素。

编写 XML 文档时,还需要注意以下几点: (1)所有 XML 元素都须有关闭标签; (2)XML 标签对大小写敏感; (3)XML 的属性值须加引号; (4)XML 中的特殊字符可以使用实体引用来表示。在 XML 中,有 5 个预定义的实体引用:

实体引用

字符

名称

<

<

小于

&gt;

>

大于

&amp;

&

和号

&apos;

单引号

&quot;

"

引号

(5)在 XML 中编写注释的语法与 HTML 的语法很相似:

代码语言:javascript
复制
<!-- This is a comment --> 

(6)XML 元素必须遵循以下命名规则:

  • 名称可以含字母、数字以及其他的字符
  • 名称不能以数字或者标点符号开始
  • 名称不能以字符串 xml(或者 XML、Xml)开始
  • 名称不能包含空格
  • 名称不能使用保留的字词

2.实例

下面以 XML 表示一个简单的后台服务配置:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<server name="UserProfileServer">
	<maxconns>1000</maxconns>
	<queuecap>10000</queuecap>
	<queuetimeout>300</queuetimeout>
	<loginfo>
		<loglevel>ERROR</loglevel>
		<logsize>10M</logsize>
		<lognum>10</lognum>
		<logpath>/usr/local/app/log</logpath>
	</loginfo>
</server>

第一行是 XML 声明,它定义 XML 的版本(1.0)和所使用的编码(UTF-8)。紧接着 server 为根结点,name 为根结点的一个属性,表示服务名称,其他子结点的文本内容表示服务的具体配置项。

3.解析

使用 XML 存储服务配置信息,我们如何解析呢?下面以 Go 为例,来解析上面的 XML 格式的服务配置。

第一步,将上面的 XML 配置信息粘贴到 XML to Go struct 快速获取 Go struct 的定义。

代码语言:javascript
复制
type Server struct {
	Name         string   `xml:"name,attr"`		//标签属性
	Maxconns     string   `xml:"maxconns"`
	Queuecap     string   `xml:"queuecap"`
	Queuetimeout string   `xml:"queuetimeout"`
	Loginfo      struct {
		Loglevel string `xml:"loglevel"`
		Logsize  string `xml:"logsize"`
		Lognum   string `xml:"lognum"`
		Logpath  string `xml:"logpath"`
	} `xml:"loginfo"`
} 

第二步,借助 Go 自带的 encoding/xml 包完成 XML 文档解析。

代码语言:javascript
复制
package main

import(
        "encoding/xml"
        "io/ioutil"
        "fmt"
        "os"    
)

func main() {
  file, err := os.Open("server.xml")
  if err != nil {
    fmt.Printf("error:%v\n", err)
    return
  }
  defer file.Close()

  data, err := ioutil.ReadAll(file)
  if err != nil {
    fmt.Printf("error: %v", err)
    return
  }
  v := Server{}
  err = xml.Unmarshal(data, &v) 
  if err != nil {
    fmt.Printf("error:%v\n", err)
    return
  }
  fmt.Printf("%+v\n", v)
}

运行输出:

代码语言:javascript
复制
{Name:UserProfileServer Maxconns:1000 Queuecap:10000 Queuetimeout:300 Loginfo:{Loglevel:ERROR Logsize:10M Lognum:10 Logpath:/usr/local/app/log}}

参考文献

XML 简介 - XML:可扩展标记语言 | MDN Go Package xml XML to Go struct Online Tool

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.语法
  • 2.实例
  • 3.解析
  • 参考文献
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档