XML使用

目录

一、XML 简介 

二、XML语法

1、文档声明

2、XML元素

1)XML标签命名规则

2)xml 属性

3、语法规则

三、xml 解析技术

1、xml 解析技术介绍

2、dom4j 解析技术

1)dom4j 编程步骤:

2)具体操作


一、XML 简介 

xml 是可扩展的标记性语言。

xml 的主要作用有:

  • 用来保存数据,而且这些数据具有自我描述性
  • 它还可以做为项目或者模块的配置文件
  • 还可以做为网络传输数据的格式(现在  JSON  为主)

二、XML语法

1、文档声明

我们先创建一个简单  XML  文件,用来描述图书信息。

<?xml version="1.0" encoding="UTF-8"?> xml声明。
    <!-- 
        xml声明 
            version是版本的意思  
            encoding是编码       
            standalone="yes/no" 表示这个xml文件是否是独立的 xml文件 
    --> 
<books>
    <!-- book标签描述一本图书 id属性描述的是图书的编号 --> 
    <book id="SN123123413241"> 
        <!-- name标签描述的是图书的信息 -->
        <name>java编程思想</name> 
        <!-- author单词是作者的意思 ,描述图书作者 --> 
        <author>华仔</author>    
        <!-- price单词是价格,描述的是图书的价格 -->
        <price>9.9</price>   
    </book>
</books>

2、XML元素

元素是指从开始标签到结束标签的内容。

1)XML标签命名规则

  • 名称可以含字母、数字以及其他的字符
  • 名称不能以数字或者标点符号开始
  • 名称不能包含空格

2)xml 属性

xml 的标签属性和 html 的标签属性是非常类似的,属性可以提供元素的额外信息

在标签上可以书写属性:

  • 一个标签上可以书写多个属性。每个属性的值必须使用引号引起来,不引会报错。
  • 规则和标签的书写规则一致。

3、语法规则

  • 所有 XML 元素都须有关闭标签(也就是闭合)
  • XML 标签对大小写敏感
  • XML 必须正确地嵌套
  • XML 文档必须有根元素,根元素就是没有父标签的元素,而且是唯一一个才行
  • XML 中的特殊字符,例如 >特殊字符:&gt,<特殊字符:&lt
  • 文本区域(CDATA 区),CDATA 语法可以告诉 xml 解析器,我 CDATA 里的文本内容,只是纯文本,不需要 xml 语法解析

CDATA   格式:

<![CDATA[   这里可以把你输入的字符原样显示,不会解析  xml ]]>

三、xml 解析技术

1、xml 解析技术介绍

不管是 html 文件还是 xml 文件它们都是标记型文档,都可以使用 w3c 组织制定的 dom 技术来解析。

 document 对象表示的是整个文档(可以是 html 文档,也可以是 xml 文档)

早期 JDK 为我们提供了两种 xml 解析技术 DOM 和 Sax 简介(已经过时,但我们需要知道这两种技术) 

dom  解析技术是 W3C 组织制定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现。Java 对 dom 技术解析标记也做了实现。

sun 公司在 JDK5 版本对 dom 解析技术进行升级:SAX( Simple  API  for  XML )

SAX 解析,它跟 W3C 制定的解析不太一样。它是以类似事件机制通过回调告诉用户当前正在解析的内容,它是一行一行的读取  xml  文件进行解析的,不会创建大量的  dom  对象。所以它在解析  xml 的时候,在内存的使用和性能上都优于  Dom  解析。 

第三方的解析:

  • jdom 在 dom 基础上进行了封装    、 
  • dom4j 又对  jdom 进行了封装。
  • pull 主要用在  Android 手机开发,是在跟 sax 非常类似都是事件机制解析 xml 文件

2、dom4j 解析技术

由于 dom4j 它不是 sun 公司的技术,而属于第三方公司的技术,我们需要使用 dom4j    就需要到  dom4j 官网下载 dom4j 的 jar 包。

1)dom4j 编程步骤:

  1. 先加载 xml 文件创建 Document 对象 
  2. 通过 Document 对象拿到根元素对象
  3. 通过根元素.elelemts(标签名);    可以返回一个集合,这个集合里放着。所有你指定的标签名的元素对象 
  4. 找到你想要修改、删除的子元素,进行相应的操作
  5. 保存到硬盘上

2)具体操作

<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book sn="SN12341232">
        <name>辟邪剑谱</name>
        <price>9.9</price>
        <author>班主任</author>
    </book>
    <book sn="SN12341231">
        <name>葵花宝典</name>
        <price>99.99</price>
        <author>班长</author>
    </book>
</books>

遍历标签获取所有标签中的内容

    @Test
    public void test2() throws DocumentException {
        //1.读取books.xml文件
        SAXReader reader = new SAXReader();
        //在Jubit测试中,相对路径是从模块名开始算
        Document document = reader.read("src/books.xml");

        //2.通过document对象获取根元素
        Element rootElement = document.getRootElement();

        //3.通过根元素获取book标签对象
        //Element.elements(标签名)它可以拿到当前元素下的指定的子元素的集合
        List<Element> books = rootElement.elements("book");

        //4.遍历,处理每个标签转换为Book类
        for(Element book:books){
            //asXML():把标签对象转换为标签字符串
            Element nameElement = book.element("name");
            //asXML():把标签对象转换为标签字符串
            System.out.println(nameElement.asXML());
            //getText():文本内容
            System.out.println(nameElement.getText());
            //attributeValue:标签的属性值
            System.out.println(book.attributeValue("sn"));
        }
    }

输出结果: 

<name>辟邪剑谱</name>
辟邪剑谱
SN12341232
<name>葵花宝典</name>
葵花宝典
SN12341231

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
TinyXML是一个小型的、简单易用的XML解析器,适用于C++环境。它的主要特点是简单易用、轻量级、跨平台、可移植性强。本文将介绍TinyXML使用方法。 ## TinyXML的安装 TinyXML的安装非常简单,只需要下载TinyXML的源代码,并将其包含到你的项目中即可。TinyXML的源代码可以在其官方网站(http://www.grinninglizard.com/tinyxml/)上下载。 ## TinyXML的基本用法 TinyXML使用非常简单,只需要包含TinyXML头文件,并使用其提供的API即可完成XML文件的解析和生成。 ### 解析XML文件 以下是一个简单的XML文件example.xml: ``` <?xml version="1.0" encoding="UTF-8"?> <root> <person> <name>John</name> <age>20</age> </person> <person> <name>Jane</name> <age>21</age> </person> </root> ``` 我们可以使用如下代码来解析该XML文件: ```c++ #include "tinyxml.h" #include <iostream> using namespace std; int main() { TiXmlDocument doc("example.xml"); bool loadOkay = doc.LoadFile(); if (loadOkay) { TiXmlNode* root = doc.FirstChild("root"); if (root) { for (TiXmlNode* node = root->FirstChild(); node; node = node->NextSibling()) { if (node->Type() == TiXmlNode::TINYXML_ELEMENT && strcmp(node->Value(), "person") == 0) { TiXmlNode* nameNode = node->FirstChild("name"); TiXmlNode* ageNode = node->FirstChild("age"); if (nameNode && ageNode) { cout << "name:" << nameNode->FirstChild()->Value() << endl; cout << "age:" << ageNode->FirstChild()->Value() << endl; } } } } } return 0; } ``` 上述代码首先创建了一个TiXmlDocument对象,并调用其LoadFile方法加载example.xml文件。如果加载成功,则获取XML文档的根节点,并循环遍历根节点的所有子节点,查找名称为“person”的节点,并获取其下的“name”和“age”子节点的值。 ### 生成XML文件 我们可以使用TinyXML来生成XML文件。以下是一个简单的示例: ```c++ #include "tinyxml.h" #include <iostream> using namespace std; int main() { TiXmlDocument doc; TiXmlElement* root = new TiXmlElement("root"); doc.LinkEndChild(root); for (int i = 0; i < 3; i++) { TiXmlElement* person = new TiXmlElement("person"); root->LinkEndChild(person); TiXmlElement* name = new TiXmlElement("name"); person->LinkEndChild(name); TiXmlText* nameText = new TiXmlText("John"); name->LinkEndChild(nameText); TiXmlElement* age = new TiXmlElement("age"); person->LinkEndChild(age); TiXmlText* ageText = new TiXmlText("20"); age->LinkEndChild(ageText); } doc.SaveFile("example.xml"); return 0; } ``` 上述代码创建了一个TiXmlDocument对象,并创建了一个名为“root”的根节点。然后循环生成三个名为“person”的节点,并为每个节点添加名为“name”和“age”的子节点,并设置其值。最后,调用TiXmlDocument的SaveFile方法将生成的XML文件保存到example.xml中。 ## 小结 TinyXML是一个简单易用的XML解析器,适用于C++环境,其主要特点是简单易用、轻量级、跨平台、可移植性强。使用TinyXML可以轻松地解析和生成XML文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鲁蛋儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值