XML

XML

为什么使用XML
问题1:Windows系统的应用怎么和Linux系统中的应用交互数据

问题2:其它诸如此类跨平台、跨操作系统的数据交互问题……

使用XML解决。

XML概述
可扩展性标记语言(eXtensible Markup Language),文件扩展名.xml

用途:描述、传输数据

使用场合:

  • 持久化数据存储
  • 数据交换
  • 数据配置

示例:person.xml

<?xml version="1.0" encoding="utf-8" ?>
<Person>
    <ID>1002</ID>
    <Name>曹操</Name>
    <Age>20</Age>
    <!--注释 -->
    <ID>1001</ID>
    <Name>周瑜</Name>
    <Age>22</Age>
</Person>

XML语法

文档声明

在编写XML文档时,需要先使用文档声明,声明XML文档的类型。
最简单的声明语法:
	<?xml version="1.0" ?>

用encoding属性说明文档的字符编码:
	<?xml version="1.0" encoding="GBK" ?>  

元素

XML元素指XML文件中出现的标签,一个标签分为开始标签和结束标签,一个标签有如下几种书写形式,例如:
	包含标签体:<a>www.baidu.com</a>
	不含标签体的:<a></a>, 简写为:<a/>
一个标签中也可以嵌套若干子标签。但所有标签必须合理的嵌套,绝对不允许交叉嵌套 ,例如:
	<a>welcome to <b>www.baidu.com</a></b>
格式良好的XML文档必须有且仅有一个根标签,其它标签都是这个根标签的子孙标签。 
------------------------------------------------------------------------------------------------

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

一个XML元素可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范:
	1名称可以含字母、数字以及其他的字符
	2名称不能以数字或者标点符号开始
	3名称不能以字符 “xml”(或者 XML、Xml)开始
	4名称不能包含空格

使用浏览器验证文件格式有效性。

属性

一个标签可以有多个属性,每个属性都有它自己的名称和取值,例如:
<Student name="zhangsan">
属性值一定要用双引号(")或单引号(')引起来
定义属性必须遵循与标签相同的命名规范 
在XML技术中,标签属性所代表的信息,也可以被改成用子元素的形式来描述,例如:
<Student>
 	<name>text</name>
</Student>

注释

Xml文件中的注释采用:“<!--注释-->” 格式。
注意:
	1 XML声明之前不能有注释
	2 注释不能嵌套

XML解析

XML解析方式
  DOM解析
    使用DOM4J(DOM for Java)实现DOM解析
    Java:JAXP技术
  SAX解析
    Pull解析和Sax类似

DOM和SAX比较
DOM解析 (Document Object Model) 文档对象模型
  易用性强,使用DOM时,将把所有的XML文档信息都存于内存中,并且遍历简单,支持XPath,增强了易用性。
  效率低,解析速度慢,内存占用量过高,对于大文件来说几乎不可能使用
  支持增删改查
SAX解析(Simple API for Xml)
  SAX是一个用于处理XML事件驱动的“推”模型,虽然它不是W3C标准,但它却是一个得到了广泛认可的API
  SAX模型最大的优点是内存消耗小
  只适合读取

使用DOM4J解析

  Dom for java
  Dom4j是一个简单、灵活的开放源代码的库。Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。
使用Dom4j开发,需下载Dom4j相应的jar文件

项目中如何使用DOM4J
  (1)项目中创建文件夹lib
  (2)把jar包复制到lib目录中
  (3)右键lib,Add AS Library,然后点OK

获取Document对象

SAXReader reader = new SAXReader();
Document  document= reader.read(new File("input.xml"));

节点对象操作

1.获取文档的根节点.
    Element root = document.getRootElement();
2.取得某个节点的子节点.
	Element element=node.element(“书名");
3.取得节点的文字
      String text=node.getText();
4.取得某节点下所有名为“member”的子节点,并进行遍历.
	List nodes = rootElm.elements(“book");
	for (Iterator it = nodes.iterator(); it.hasNext();) {
		Element elm = (Element) it.next();
	}

节点属性操作

1.取得某节点下的某属性
	Element root=document.getRootElement();   
	//属性名name
    Attribute attribute=root.attribute("size");
2.取得属性的文字
	String text=attribute.getText();
3.删除某属性
	Attribute attribute=root.attribute("size");
	root.remove(attribute);

案例1:读取xml文件

public static void readxml() throws Exception{
		//1创建SaxReader
		SAXReader reader=new SAXReader();
		//2获取Document对象
		Document document=reader.read(new FileReader("src\\books2.xml"));
		//3获取根节点
		Element root=document.getRootElement();//books
		//System.out.println(root.getName());
		//4获取book集合
		List<Element> bookList=root.elements("book");
		for (Element b : bookList) {
			//System.out.println(b.getName());
			//5获取属性
			String id=b.attributeValue("id");
			String name=b.element("name").getText();
			String author=b.element("author").getText();
			String price=b.elementText("price");
			Book book=new Book(Integer.parseInt(id), name, author, Double.parseDouble(price));
			System.out.println(book.toString());
		}
	}

案例2 写入XML文件

public static void writeXml() throws Exception{
		//1 创建SaxReader
		SAXReader reader=new SAXReader();
		//2读取
		Document document=reader.read(new FileReader("src\\books2.xml"));
		//3获取根节点
		Element root = document.getRootElement();
		//4添加节点
		Element newbook = root.addElement("book");
		//5添加属性
		newbook.addAttribute("id","1003");
		//6newbook添加name author price
		newbook.addElement("name").setText("android开发");;
		newbook.addElement("author").setText("老张");;
		newbook.addElement("price").setText("88.8");;
		
		//7写入文件中
		OutputFormat format=OutputFormat.createPrettyPrint();//创建一个漂亮的输出格式
		format.setEncoding("utf-8");
		XMLWriter writer=new XMLWriter(new FileWriter("src\\books2.xml"), format);
		writer.write(document);
		writer.close();
		System.out.println("写入成功");
		
	}

案例3 修改和删除xml文件

public static void updateXml() throws Exception{
		//1创建Xmlreader
		SAXReader reader=new SAXReader();
		//2文档
		Document document = reader.read(new FileReader("src\\books2.xml"));
		//3获取根节点
		Element root = document.getRootElement();
		
		
		//4获取id=1003的book
		List<Element> elements = root.elements("book");
		Element bookEle = elements.get(2);
		bookEle.element("name").setText("android从入门到大神");
		Element first =elements.get(0);
		//5删除
		root.remove(first);
		
		//6写入
		OutputFormat format=OutputFormat.createPrettyPrint();
		format.setEncoding("utf-8");
		XMLWriter writer=new XMLWriter(new FileWriter("src\\books2.xml"), format);
		writer.write(document);
		writer.close();
		
		System.out.println("修改删除完毕");
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值