当前位置: 首页 > news >正文

XML操作

XML简介

XML是指可扩展标记语言(eXtensible Markup Language),它是一种标记语言,类似HTML。

XML技术除用于保存有关系的数据之外,它还经常用作软件配置文件,以描述程序模块之间的关系

XML结构

文档声明

<?xml version="1.0" encoding="UTF-8" ?>

属性

<天津 id='022'>

注释

<!-- -->

CDATA区 、特殊字符 

<![CDATA[展示的内容]]>

是否独立

* standalone="yes或者no" 代表xml的文件是否是独立的。(如果是no,不独立,可以引入外部的文件)(可选的)

标签

对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。例如:下面两段内容的意义是不一样的

属性

一个元素可以有多个属性,每个属性都有它自己的名称和取值,例如:<mytag id=“12” …/>

元素中的属性是不允许重复的

转义字符

CDATA区

CDATA是Character Data的缩写

 作用:把标签当做普通文本内容;

 语法:<![CDATA[内容]]>

 例子:

<![CDATA[
<itcast>www.itcast.cn</itcast>
]]>
以上红色部分被当做普通文本而不是标签

Dom4j解析xml

Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。 

使用Dom4j开发,需下载dom4j相应的jar文件。

Dom4j解析操作

获取xml解析器  SAXReader   saxReader=new SAXReader();
获取dom对象   Document doc=saxReader.read(new File(“xml文件路径”));(注意,xml文件路径最好放到项目里面,写路径地址的时候,使用相对地址 ./表示当前项目路径)

nodeIterator()   获取当前document或者当前标签的所有子节点(注意:节点包括注释节点(注释节点name为null,值text为注释内容),标签节点,文本节点,属性节点)

elements():获取标签下面的所有子标签,返回list的标签集合
elementIterator():获取标签下面的所有子标签,返回标签迭代器
getRootElement() 获取当前文档的根标签
element("标签名字")获取某个标签下面指定名称的第一个标签对象
elementText("标签名字")获取某个标签下面指定名称的第一个标签的text内容
attribute("属性名称")  获取某个标签的指定名称的属性对象
attributeValue("属性名称")  获取某个标签的指定名称的属性对象值

使用Dom4j创建XML

DocumentHelper.createDocument() 创建document文档
addElement("Students");   增加指定名称的标签
addAttribute("属性名", "属性值") 给标签新增指定的属性名称和属性值
nameEle.setText("文本内容"); 给标签设置指定的内容
OutputFormat.createPrettyPrint()  指定xml内容输出的文件格式:带有空格和换行,格式美观
OutputFormat.createCompactFormat()  指定xml内容输出的文件格式:去掉空格和换行,一般用于正式的服务器上
format.setEncoding("utf-8"); //设置xml文件的编码和解析的编码
XMLWriter writer=new XMLWriter(outputStream, format);创建xml写入的对象
writer.write(doc); 写入document文档

使用dom4j修改xml

attribute.setText("id2");  给属性赋值
attribute.setValue("id2"); 给属性赋值  也可以通过增加同名属性的方法,修改属性值
element.element("name").setText("ddddd") 给某个标签的文本设置值

使用dom4j删除标签或属性

rmElement.detach()  删除rmElement标签
element.remove(rmElement) 删除rmElement标签
attribute.detach() 删除attribute属性
element.remove(attribute); 删除element属性

DTD

在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。

DTD(Document Type Definition),全称为文档类型定义。

dtd约束引入三种方式

DTD约束即可以作为一个单独的文件编写,也可以在XML文件内编写

使用内部DTD

<!DOCTYPE  根节点  [   DTD的代码  ]>

使用外部DTD

<!DOCTYPE 根元素 SYSTEM “DTD文档路径”>

如:<!DOCTYPE 书架 SYSTEM “book.dtd”>

 使用网络DTD

当引用的DTD文档在公共网络上时,采用如下方式:

 

<!DOCTYPE 根元素 PUBLIC “DTD名称” “DTD文档的URL”>
如:<!DOCTYPE web-app PUBLIC 
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

 DTD约束语法细节

格式

例如:

<!ATTLIST 商品 

类别 CDATA #REQUIRED 必须的

颜色 CDATA #IMPLIED  可选的

>

属性值类型:

CDATA:表示属性的取值为普通的文本字符串

 ENUMERATED (DTD没有此关键字):表示枚举,只能从枚举列表中任选其一,如(鸡肉|牛肉|猪肉|鱼肉)

 ID:表示属性的取值不能重复(不能只写数字)

 设置说明

 

 元素类型

* (#PCDATA) 字符串

* EMPTY 空

* ANY 任意的

* (子元素)

子元素

* , 子元素出现是有顺序的

* | 子元素只能出现一个

* + 子元素出现1次或多次

* * 子元素出现0次或多次

* ? 子元素出现0次或1次

<?xml version="1.0" encoding="UTF-8"?>




<!--<!DOCTYPE 书架 [-->
        <!--<!ELEMENT 书架 (书+)>-->
        <!--<!ELEMENT 书 (书名,价格,作者)>-->
        <!--<!ELEMENT 书名 (#PCDATA)>-->
        <!--<!ELEMENT 作者 (#PCDATA)>-->
        <!--<!ELEMENT 价格 (#PCDATA)>-->


        <!--]>-->

<!DOCTYPE 书架 [
        <!ELEMENT 书架 (书+)>
        <!ELEMENT 书 ((作者?,价格*,类别)| 内容 )>
        <!ELEMENT  作者 (#PCDATA)>
        <!ELEMENT  价格 (#PCDATA)>
        <!ELEMENT  类别 (#PCDATA)>
        <!ELEMENT  内容 (#PCDATA)>

        ]>

<书架>
    <>
        <作者>zzz</作者>
        <!--<作者>zzz</作者> 报错只能有一个作者-->
        <价格>123</价格>
        <类别>水果</类别>
    </>
    <>
        <作者>zzz</作者>
        <!--<价格>123</价格> *可以有多个价格-->
        <价格>123</价格>
        <类别>水果</类别>
    </>
    <>
        <!--<作者>zzz</作者>/选一个-->
        <!--<价格>123</价格>-->
        <!--<类别>水果</类别>--> 
        <内容>fasfasdfasf</内容>
    </>
</书架>

 

转载于:https://www.cnblogs.com/taozizainali/p/10945455.html

相关文章:

  • 制作支持UEFI PC的Server2008 R2系统安装U盘
  • c++ 中 毫秒级时间获取
  • golang使用oracle碰到go/lib/time/zoneinfo.zip: no such file or directory
  • Introduction to Machine Learning
  • Windows Server 2012 R2上安装.Net4.6.1出错
  • 解决操作缓冲池重复添加的问题
  • linux复制指定目录下的全部文件到另一个目录中,linux cp 文件夹
  • 更改阿里云域名解析台里某个域名绑定的IP之后不能解析到新IP
  • 区块链承兑系统是怎样的?
  • ionic2-loading动画
  • 编译安装zabbix
  • 值和引用
  • 装饰器-python
  • 眼见为实:.NET类库中的DateTimeOffset用途何在
  • SpringCloud学习系列之五-----配置中心(Config)和消息总线(Bus)完美使用版
  • [译]如何构建服务器端web组件,为何要构建?
  • Angular4 模板式表单用法以及验证
  • C++入门教程(10):for 语句
  • GitUp, 你不可错过的秀外慧中的git工具
  • in typeof instanceof ===这些运算符有什么作用
  • Python学习之路16-使用API
  • vuex 笔记整理
  • Xmanager 远程桌面 CentOS 7
  • 大主子表关联的性能优化方法
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 译有关态射的一切
  • 用 Swift 编写面向协议的视图
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 字符串匹配基础上
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • !!Dom4j 学习笔记
  • #stm32整理(一)flash读写
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • $.ajax()
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (done) 两个矩阵 “相似” 是什么意思?
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (数据结构)顺序表的定义
  • (四)Android布局类型(线性布局LinearLayout)
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • ***利用Ms05002溢出找“肉鸡
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET Remoting学习笔记(三)信道
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .net中我喜欢的两种验证码
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • [ IO.File ] FileSystemWatcher
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • [16/N]论得趣