xml相关

 

XML简介:                                                                                                                                                                                                   a) XML即可扩展标记语言(eXtensible Markup Language)                                                                                                               b)  XML是一种非常灵活的语言,没有固定的标签,所有的标签都可以自定义                                                                               c)  通常,xml被用来信息的记录和传递,因此,XML经常被用来充当配置文件

DTD

  • dtd简介

               a)DTD, Document Type Definition,文档类型定义

               b)DTD用于约束xml的文档格式,保证xml是一个有效的xml

               c)DTD可以分为两种,内部DTD,外部DTD

  •  使用DTD 

           参考:http://www.w3school.com.cn/dtd/index.asp

             a)内部DTD

                        <!DOCTYPE 根元素 [元素声明]>

                        元素声明语法<!ELEMENT 元素名 (子元素[,子元素...])>

                       数量词:

                              +:表示出现一次或多次,至少一次

                              ?:表示出现0次货1次

                               *:表示任意次

                       属性语法:  <!ATTLIST 元素名称 属性名称 属性类型 默认值>

                              属性类型:

                                        CDATA:值为字符数据 (character data)

                                        ID:值为唯一的 id等等

                              默认值:#REQUIRED :属性值是必需的;   #IMPLIED:  属性不是必需的;#FIXED value:  属性值是固                                             定的   

<?xml version="1.0" encoding="UTF-8"?>
<!-- 声明内部DTD -->
<!-- 
CDATA:字符串
#REQUIRED:必需得
#PCDATA:内容必需为文本
 -->
<!DOCTYPE scores [
	<!ELEMENT scores (student*)>
	<!ELEMENT student (name,course,score)>
	<!ATTLIST student id CDATA #REQUIRED>
	<!ELEMENT name (#PCDATA)>
	<!ELEMENT course (#PCDATA)>
	<!ELEMENT score (#PCDATA)>
]>
<scores>
	<student id='1'>
		<name>王彤</name>
		<course>java</course>
		<score>89</score>
	</student>
	<student id='2'>
		<name>李佳</name>
		<course>mysql</course>
		<score>99</score>
	</student>
	
</scores>

                   b)外部DTD

                           创建一个独立的dtd文件  

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT scores (student*)>
<!ELEMENT student (name,course,score)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT course (#PCDATA)>
<!ELEMENT score (#PCDATA)>

                          在xml'文件中因素dtd约束文件 

<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入外部dtd文件 -->
<!DOCTYPE scores SYSTEM "scores.dtd">
<scores>
	<student id='1'>
		<name>王彤</name>
		<course>java</course>
		<score>89</score>
	</student>
	<student id='2'>
		<name>李佳</name>
		<course>mysql</course>
		<score>99</score>
	</student>
</scores>

 一、XML解析

  1. DOM解析   官方提供的解析方式,基于xml树结构解析 ,消耗资源
  2. SAX解析    基于事件的解析 , 消耗资源小,适用于数据量大的XML
  3. JDOM解析   比DOM  第三方提供,开源免费的解析方式,比DOM解析快
  4. DOM4J解析  第三方提供  开源免费  是JDOM升级版性能优异、功能强大 java XML api     

导包dom4j

package com.bjsxt.cml;
import java.io.File;
import java.util.Iterator;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class TestXml {
public static void main(String[] args) throws DocumentException {
	//[1]创建SAXReader对象,用于读取xml文件
			SAXReader reader = new SAXReader();
			//[2]读取xml文件,等到document对象
			Document d = reader.read(new File("src/scores2.xml"));
			//[3]获取根元素
		    Element root = d.getRootElement();
		    //[4]获取根元素下的所有子元素
		    Iterator<Element> it = root.elementIterator();
		    while(it.hasNext()){
		    	//取出元素
		    	Element e = it.next();
		    	//获取属性
		    	//Attribute is = e.attribute(0);//根据属性下标获取属性
		    	//Iterator<Element> i = e.attributeIterator();//获取属性迭代器获取多个属性
		    	Attribute id = e.attribute("id");//根据属性名获取属性
		    	System.out.println(id.getName()+"="+id.getValue());
		    	 
		    	//获取student的子元素
		    	Element name = e.element("name");
		    	Element course = e.element("course");
		    	Element score = e.element("score");
		    	System.out.println(name.getName()+"="+name.getStringValue());
		    	System.out.println(course.getName()+"="+course.getText());
		    	System.out.println(score.getName()+"="+score.getStringValue());
			   
		    }
		    
}
}

二、生成XML

package com.bjsxt.cml;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class TestCreateXml {
	public static void main(String[] args) throws IOException {
		//[1]通过DocumentHelper生成一个Document对象
		Document doc = DocumentHelper.createDocument();
		//[2]添加并得到根元素
		Element root= doc.addElement("books");
		//[3]为根元素添加子元素
		Element book = root.addElement("book");
		//[4]为book元素添加属性
		book.addAttribute("id", "1");
		//[5]为book元素添加子元素
		Element name = book.addElement("name");
		Element author = book.addElement("author");
		Element price = book.addElement("price");
		//[6]为子元素添加文本
		name.addText("Thinking in java");
		author.addText("小明");
		price.addText("118");
//		//[7]将doc输出到一个xml文件中
//		Writer writer = new FileWriter(new File("src/books.xml"));
//		doc.write(writer);
//		//关闭资源
//		writer.close();		
		//[7]格式良好的xml
		OutputFormat format = OutputFormat.createPrettyPrint();
		XMLWriter writer = new XMLWriter(new FileWriter(new File("src/books2.xml")) , format);
		writer.write(doc);
		writer.close();
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值