day02XML2+JUNIT+Properties
来源:互联网 发布:淘宝抢单神器软件 编辑:程序博客网 时间:2024/05/18 11:28
1. 四种xml的数据解析方法
1. dom 方法 jaxp
2. sax方法 jaxp
3. pull方法 xmlpull
4. dom4j方法
2.DOM方式
全名:document object Model 文档对象模型
这种方式是w3c处理xml文件的一种方式(构建树,以节点形式操作)
JAXP进行DOM方式解析,SUN公司指定的。包含在JDK中。
优点:把xml文档当做一个树对待;对于增删改查非常方便
缺点:必须加载整个xml文档才能构建此树,当xml过大时有可能会内存泄露
包:org.w3c.*
dom读取步骤(Document):
//1.通过Document解析器工厂获得Document解析器
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
//2.使用Document解析器解析所在位置xml
Document document= db.parse(path);
dom写入步骤
//1通过transformer(转换器)工厂获得transformer对象
Transformer tf = TransformerFactory.newInstance().newTransformer();
//2.通过transformer对象将内存中的document对象写入xml文件中
tf.transform(newDOMSource(document),new StreamResult(path));
2. SAX 方式(推,被动)
全名:simple api for xml
这种方式不是官方标准。属于开源社区
JAXP进行SAX方式解析
优点:读取到文档的某一部分就解析,占用内存小。(注意:SAX会读取回车换行空白的部分(当成文本来读)
缺点:只能读
包:org.sax.*;
//注意:sax解析器会把回车换行也解析进去,如果不把currentName置为空,则会出现内容为空
public class MySaxTest2 {
public static void main(String[] args)throws Exception{
//第一步:通过sax解析器工厂获取解析器
SAXParser sax = SAXParserFactory.newInstance().newSAXParser();
//第二步:获取读取器
XMLReader reader = sax.getXMLReader();
//第三步:向读取器注册内容事件
MyDefault md = new MyDefault();
reader.setContentHandler(md);
//第四步:解析xml
reader.parse("src/books.xml");
List<Book> books = md.getBooks();
for(Book book : books){
System.out.println(book);
}
}
}
class MyDefaultextends MyDefaultContentHandler{
List<Book> books = new ArrayList<Book>();
Book book = null;
String currentName = "";
//把XML中的数据封装到JavaBean中
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
if("书".equals(qName)){
book = new Book();
}
currentName = qName;
}
public void characters(char[] ch,int start, int length)
throws SAXException {
if("书名".equals(currentName)){
book.setName(new String(ch,start,length));
}
if("作者".equals(currentName)){
book.setAuthor(new String(ch,start,length));
}
if("售价".equals(currentName)){
book.setPrice(Float.parseFloat(newString(ch,start,length)));
}
}
public void endElement(String uri, String localName, String qName)
throws SAXException {
if("书".equals(qName)){
books.add(book);
}
//注意:sax解析器会把回车换行也解析进去,如果不把currentName置为空,则会出现内容
为空
currentName = "";
}
public List<Book>getBooks(){
returnbooks;
}
}
SAX读取步骤:(XMLReader)
//1.通过sax工厂得到解析器SAXParser
SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
//2.获取读取器XMLReader
XMLReader reader = parser.getXMLReader();
//3.在读取器上注册内容处理器ContentHandler,接口方法过多可用适配器
reader.setContentHandler(new ContentHandler(){});
//4.解析xml文件
reader.parse("src/books.xml");
3. PULL方式(拉,主动)
这种方式不是官方标准
XMLPULL进行PULL解析
优点:读取到文档的某一部分就解析,占用内存小。
缺点:只能读
包(需要jar):Org.xmlpull.*;
Pull方式读取步骤:(XmlPullParser)
//1.通过工厂获得解析器
XmlPullParser pull = XmlPullParserFactory.newInstance().newPullParser();
//2.以字节流的形式输入内容。编码要与xml中声明的编码保持一致
pull.setInput(new FileInputStream("src/books.xml"),"utf-8");
//3.通过pull得到事件类型
int type = pull.getEventType();
while(type != XmlPullParser.END_DOCUMENT){
if(type == XmlPullParser.START_DOCUMENT){
System.out.println("文档的开始");
}
if(type == XmlPullParser.START_TAG){
System.out.println("元素的开始");
}
if(type == XmlPullParser.END_TAG){
System.out.println("元素的结束");
}
if(type == XmlPullParser.TEXT){
System.out.println("文本");
}
//4.得到下一个事件类型,千万别忘记了!
type = pull.next();
}
4. DOM4J方式(推荐)
Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。
注意:需要引入jar包
DOM4j中,获得Document对象的方式有三种:
1.读取XML文件,获得document对象
SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml"));
2.解析XML形式的文本,得到document对象.
String text ="<members></members>";
Document document = DocumentHelper.parseText(text);
3.主动创建document对象.
Document document =DocumentHelper.createDocument();
//创建根节点
Element root = document.addElement("members");
Dom4j的读取步骤(document):
//1.获得SAX读取器
SAXReader sr = new SAXReader();
//2.获得document
Document document = sr.read("src/books.xml");
Dom4j的写入步骤:
//1.获得输出格式
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
//2.得到以字节流的形式输出的XMLWriter
XMLWriter writer =
new XMLWriter(new FileOutputStream("src/books.xml"), format);
//3.把document写入xml文件
writer.write(document);
//4.特别注意关闭流,因为有缓冲
writer.close();
xpath语法(熟悉),xpath和jdbc都是下标为1开始,其他为0。
5. xml的scheme约束
Schema约束本身就是一个xml文件,扩展名为xsd
编写头部信息步骤:
1.查看Schema文档,找到根元素。
<书架>
</书架>
2.首先设置名称空间(xxx)
schema文档中的根元素的targetNamespace指定了名称空间。
XML中引入该名称空间即可。使用xmlns关键字
<itheima:书架 xmlns:itheima="xxx">
</itheima:书架>
3.xxx名称空间对应的xsd文件所在位置
使用schemaLocation去指定:xsd名称空间 xsd的路径
<itheima:书架 xmlns:itheima="xxx">
schemaLocation="http://www.itcast.cnbook.xsd">
</itheima:书架>
4.xsd所对应的标准名称空间
来自一个标准的名称空间,需要使用xmlns来声明:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<itheima:书架xmlns:itheima="http://www.itcast.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.itcast.cnbook.xsd">
</itheima:书架>
注意:xmlns声明关键字可以申明默认名称空间
如:xmlns =”xxx”;
6. properties文件
1.旧方法:
//1.创建Properties对象
Properties p = new Properties();
//2.以输入流的形式装载xml文件(需要写src)
p.load(new FileInputStream("src/student.properties"));
//3.通过键取得值
Stringvalue = p.getProperty("StudentDao");
2.新方法:
//1.获得资源绑定对象(如果在src下直接为student,不要后缀名,不要src)
ResourceBundle rb = ResourceBundle.getBundle("student");
//如果放在某个包中则包的路径名也要写
ResourceBundle rb = ResourceBundle.getBundle("com/itheima/util/student");
//2.使用资源绑定对象通过键来获得值
String value = rb.getString("StudentDao");
7. JUnit方法
注意事项:
1.导入JUnit包
2.测试类必须在方法上面写@Test来说明为Test类
3.访问权限必须为public
4.方法不能有参数
- day02XML2+JUNIT+Properties
- JUnit加载properties配置文件
- log4j.properties和junit笔记
- Junit 单元测试、BeanUtils、Properties类
- Junit 单元测试、BeanUtils、Properties类
- Junit 单元测试、BeanUtils、Properties类
- junit测试类有自己的properties
- Android Junit中读取properties文件中的配置信息
- spring-boot-mybatis junit测试加载不到applicationContext.properties文件
- 集合、泛型、IO流、多线程、Junit 、内省 、Properties、 路径问题
- Junit、Assert、内省、Properties类与配置文件的使用
- JUNIT
- junit
- Junit
- JUnit
- JUnit
- JUnit
- JUNIT
- js showModalDialog弹出对话框
- Caused by: java.lang.UnsupportedOperationException: Exceeded maximum number of wifi locks
- C语言算法--插入排序
- linux内核调度算法(2)--CPU时间片如何分配
- java设计模式-责任链模式(Chain Of Resposibility)
- day02XML2+JUNIT+Properties
- static ---静态成员函数
- 黑客是如何黑我的电脑的
- 在web.xml中配置404错误拦截
- 问题列表
- App盈利新四化:蒋涛谈移动互联网现状与发展
- CList的使用
- Unity3D运行时刻资源管理
- day03javaWeb概念+Tomcat部署