Html 显示页面
Xml 存储数据和传输数据 本身是为了取代html 现在实际作用是存储数据和作为配置文件 传输数据功能被json实现了 xml是可拓展的标记语言(xml中允许用户自定义标签)
Xml第一行是配置文件 版本号,字符集等数据<?xml version="1.0" encoding="UTF-8"?>而且自动顶头写
语法:
标签区分大小写 <A> <a>
遍历获取相同标签内容
完成创建bean的工厂
新建一个工厂模式
新建一个测试类
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);
}
}
完成创建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文件没有限制