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>写解析文件
遍历获取相同标签内容
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>
新建一个工厂模式
新建一个测试类
xml与properties
结构上来说
xml是树形文件,properties主要以键值对的形式存在
灵活度上来说
xml文件要比properties灵活度高一点
便捷角度来说
properties要比xml配置简单
应用程度上来说
properties应用于小型项目,xml文件没有限制
4000
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
相关文章推荐
- 步进电机相关基础知识及常见问题(转载)
- 项目开发中经常要用到的知识----Java读取.Properties,.Xml,.Ini文件(二)
- XML Sitemap 相关问题
- NYOJ - 14 - 会场安排问题(区间相关问题---选择不相交区间-贪心算法)
- xml和xsd架构文档相关知识
- [导入]分布式编程->XML Webservice实现原理及相关知识
- Web客户端语言HTML、XHTML和XML相关知识介绍
- Admob 升级问题反馈 Google AdMob的PIN码相关知识
- 解决properties相关的中文处理乱码问题
- 项目开发中经常要用到的知识----Java读取.Properties,.Xml,.Ini文件(三)
- XML Webservice实现原理及相关知识
- Linux下内存释放问题相关知识
- Win2000/XP 打开方式-选择程序错误相关问题
- xml 相关知识及xml解析(jaxp)
- 服务启动初始化相关配置 如XML、properties、log等文件
- xml的相关知识
- XML Webservice实现原理及相关知识
- xml相关知识
- xml和xsd架构文档相关知识
- XML Webservice实现原理及相关知识