您的位置:首页 > 运维架构

xml相关知识,xml与properties的选择问题

2017-09-26 10:04 375 查看
Html   显示页面

Xml 存储数据和传输数据 本身是为了取代html  现在实际作用是存储数据和作为配置文件  传输数据功能被json实现了   xml是可拓展的标记语言(xml中允许用户自定义标签)

Xml第一行是配置文件 版本号,字符集等数据<?xml version="1.0" encoding="UTF-8"?>而且自动顶头写

语法:
标签区分大小写 <A> <a>

Xml语法很严格,有开始标签就要有结束标签 </book>

xml的元素名称,必须以字母开头,中间不能有空格和:

元素的名称不能是以xml开头,这儿不区分大小写

xml文档必须有一个根元素

!标签可嵌套,但是不允许交叉嵌套

属性:

不能使用空格,冒号特殊字符

属性必须以字母开头

属性必须使用引号

注释:

<!--注释-->

xml解析方式:

Dom解析和SAX解析

Dom解析:整个文档加载到内存中,进行解析

优点:支持增删改查

缺点:文档特别大,有可能造成内存溢出

SAX解析:一行接着一行解析 不会造成内存溢出,适用于大文件的解析

缺点:不能进行增删改

dom解析需要导入包 dom4j-1.6.1jar包

先写一个简单的xml文件<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<auther id="886">Yoo Fale</auther>
<name>不能遗忘的那些日子</name>
<price>999</price>
</book>
<book>
<auther>夏红</auther>
<name>gay里gay气</name>
<price>12</price>
</book>
</books>写解析文件
public class Demo1 {

public static void main(String[] args) throws DocumentException {
// 获取文档解析器
SAXReader reader = new SAXReader();
// 加载文件demo1.xml 返回document 代表整个文档
Document document = reader.read("src/demo1.xml");
// 获取文件根节点(根元素)
Element rootElement = document.getRootElement();// <books></books>
Element element2 = rootElement.element("book");
Element element3 = element2.element("auther");
String text = element3.getText();
System.out.println(text);
// 获取子节点
Object object = rootElement.elements("book").get(0);// <book>(/book>
// 强转为元素
Element book1 = (Element) object;
// 再次获取子节点
Element element = book1.element("auther");// <auther></auther>
// 获取文本内容
String auther = element.getText();
System.out.println(auther);
}

}
获取属性的值
// 获取id属性的
Element element = book1.element("auther");// <auther></auther>
// 获取id属性的值
Attribute attr = element.attribute("id");
System.out.println(attr.getValue());


遍历获取相同标签内容
public static void main(String[] args) throws DocumentException {
// 获取文档解析器
SAXReader reader = new SAXReader();
// 加载文件demo1.xml 返回document 代表整个文档
Document document = reader.read("src/demo1.xml");
// 获取文件根节点(根元素)
Element rootElement = document.getRootElement();// <books></books>
// 获取子节点
List elements = rootElement.elements("book");// <book>(/book>
for (Object object2 : elements) {
Element book=(Element) object2;
Element element = book.element("name");
String text = element.getText();
System.out.println(text);
}
}


b标签在a标签里,就是b标签依赖a标签。

完成创建bean的工厂
新建一个xml配置文件<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id ="P1" class="com.bean.P1"></bean>
<bean id ="P2" class="com.bean.P2">
<property name="S1">com.bean.S1</property>
</bean>
<bean id="P3" class="com.bean.P3">
<property name="S2">com.bean.S2</property>
<property name="S3">com.bean.S3</property>
</bean>
</beans>

新建一个工厂模式
public class BeanFactory {
public static Object getBean(String beanName) throws Exception{
//				1.创建一个容器来存放对象
Map<String,Object> map =new HashMap<>();
//				2读取配置文件 以此创建对象
//				2.1创建解析器
SAXReader reader = new SAXReader();
//				2.2加载配置文件
Document document = reader.read("src/application.xml");
//				2.3获取根节点
Element rootElement = document.getRootElement();
//				2.4获取元素bean元素
List beans =rootElement.elements("bean");
//				2.5遍历bean
for(Object object:beans){
Element bean =(Element)object;
//					获取bean元素下面的子元素 property
List props =bean.elements("property");
//					判断
if(props.size()>0){
for(Object object2:props){
Element property =(Element)object2;
//						获取property的属性和文本 name text(类的全名)
String name = property.attribute("name").getValue();//key
String text = property.getText();
//						创建property下面的对象
Object object3 =Class.forName(text).newInstance();//对象作为balue
map.put(name,object3);
}
}
//					拿属性 id class
String key = bean.attribute("id").getValue();//key
String clazz = bean.attribute("class").getValue();
//					创建对象
Object object4=Class.forName(clazz).newInstance();
//					将对象放在map中
map.put(key, object4);
}
return map.get(beanName);
}
}


新建一个测试类
public class Test1 {
public static void main(String[] args) throws Exception {
S1 bean = (S1) BeanFactory.getBean("S1");
bean.run();
}
}


xml与properties

结构上来说

xml是树形文件,properties主要以键值对的形式存在

灵活度上来说

xml文件要比properties灵活度高一点

便捷角度来说

properties要比xml配置简单

应用程度上来说

properties应用于小型项目,xml文件没有限制

4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: