1.什么是xml文件???

xml文件和html文件一样,实际上是一个文本文件。它是一种可扩展标记语言,即简单的数据存储语言。使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然可扩展标记语言占用的空间比二进制数据要占用更多的空间,但可扩展标记语言极其简单易于掌握和使用。XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的公共语言。

2. xml的作用?

1.数据交互。

2.配置文件。

3.标准的xml格式。

1.有且只有一个跟元素

2.xml标签大小写正确区分

3.正确使用结束标签

4.正确嵌套标签

5.使用了合法的标签名

4. xml元素定义

在xml加入DTD声明——<!DOCTYPE root[]>

元素的分类——:

<!ELEMENT element-name EMPTY>//空元素

<!ELEMENT element-name (#PCDATA)>//文本元素

<!ELEMENT element-name(e1,e2)>//混合元素

元素的限制——:

与(,)非(|)

次数——:0或1:?

0-N:      *

1-N:     +

5.属性定义

语法:<!ATTLIST element-name att_name type desc>

属性类型type:ID.,(男|女),CDATA,IDREF,reference

属性描述:#REQUIRED:必填

#IMPLIED:非必填

‘默认值’(只有type为(男|女)类型时,desc才可以用默认值的方式)

示例(xml元素和属性定义):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persons [<!ELEMENT persons (person+)><!ELEMENT person (name,age,contact,br*)><!ELEMENT name (#PCDATA)><!ELEMENT age (#PCDATA)><!ELEMENT contact (phone|email)><!ELEMENT br EMPTY><!ATTLIST person pid ID #REQUIREDsex (男|女) '男'qq CDATA #IMPLIEDparent IDREF #IMPLIED>
]><persons><person pid="p1" sex="男" qq="aaa" parent="p2"><name>张小明</name><age>10</age><contact><phone>1234567</phone></contact><br/></person><person pid="p2"><name>张大明</name><age>35</age><contact><email>123@qq.com</email></contact></person>
</persons>

6.读取xml。

1.定义一个xml文件:

<?xml version="1.0" encoding="UTF-8"?><!--config标签:可以包含0~N个action标签--><!DOCTYPE config [<!ELEMENT config (action+)><!ELEMENT action (forward+)><!ATTLIST action path CDATA #REQUIREDtype CDATA #REQUIRED><!ATTLIST forwardname CDATA #REQUIREDpath CDATA #REQUIREDredirect (true|false) 'false'>
]><config><!--action标签:可以饱含0~N个forward标签 path:以/开头的字符串,并且值必须唯一 非空 ,子控制器对应的路径type:字符串,非空,子控制器的完整类名--><action path="/registerAction" type="test.action.RegisterAction"><forward name="success" path="/index.jsp" redirect="true" /><forward name="failed" path="/register.jsp" redirect="false" /></action><action path="/loginAction" type="test.action.LoginAction"><forward name="a" path="/index.jsp" redirect="false" /><forward name="b" path="/welcome.jsp" redirect="true" /></action>
</config>

先创建一个动态网页项目,点击src右击,点击new,点击source folder建一个文件夹,将xml文件放入其中。

定义一个Java文件用来读取xml。

package com.zking.demo;import java.io.InputStream;
import java.util.List;import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;public class XMLDemo {public static void main(String[] args) throws Exception {InputStream is = XMLDemo.class.getResourceAsStream("/config.xml");SAXReader reader = new SAXReader();Document doc = reader.read(is);Element element = doc.getRootElement();List<Element> list = element.selectNodes("/config/action");for (Element e1 : list) {String path = e1.attributeValue("path");String type = e1.attributeValue("type");System.out.println(path+"--------"+type);List<Element> list2 = e1.selectNodes("forward");for (Element e2 : list2) {String name2 = e2.attributeValue("name");String path2 = e2.attributeValue("path");String redirect2 = e2.attributeValue("redirect");System.out.println(name2+"------"+path2+"------"+redirect2);}}}}

结果就是:

当然需要一些读取xml文件的jar包。

7.xml建模

1.把xml通过java文件的方式处理到内存里面。

2.一个标签就是一个对象,也就对应一些属性。

上面xml文件Java对象就有config,action,forward三个,也对于一些属性和方法。

如下:

config类:

package com.zking.mymvc.XMLMedle;import java.util.HashMap;
import java.util.Map;import com.zking.mymvc.XMLException.ActionNotFindException;
import com.zking.mymvc.XMLException.ActionNotRepeatException;public class Config {private Map<String,Action> map = new HashMap<>();public void put(Action action) {if(map.containsKey(action.getPath())) {throw new ActionNotRepeatException("path:"+action.getPath()+"不能重复!");}map.put(action.getPath(), action);}public Action find(String path) {char charAt = path.charAt(0);if(charAt!='/') {throw new RuntimeException("path:"+path+"没有以  / 开头!");}if(!map.containsKey(path)) {throw new ActionNotFindException("path:"+path+"没有找到!");}return map.get(path);}}

action类:

package com.zking.mymvc.XMLMedle;import java.util.HashMap;
import java.util.Map;import com.zking.mymvc.XMLException.ForwardNotFindException;
import com.zking.mymvc.XMLException.ForwardRepeatException;public class Action {private Map<String,Forward> map=new HashMap<>();private String path;private String type;public String getPath() {return path;}public void setPath(String path) {if(path.charAt(0)!='/') {throw new RuntimeException("path:"+path+"没有以  / 开头!");}this.path = path;}public String getType() {return type;}public void setType(String type) {this.type = type;}public void put(Forward forward) {if(map.containsKey(forward.getName())) {throw new ForwardRepeatException("name:"+forward.getName()+"不能重复!"); }map.put(forward.getName(), forward);}public Forward find(String name) {if(!map.containsKey(name)) {throw new ForwardNotFindException("name:"+name+"没有找到!");}return map.get(name);}@Overridepublic String toString() {return "Action [path=" + path + ", type=" + type + "]";}}

forward类:

package com.zking.mymvc.XMLMedle;public class Forward {private String name;private String path;private boolean redirect;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPath() {return path;}public void setPath(String path) {this.path = path;}public boolean isRedirect() {return redirect;}public void setRedirect(boolean redirect) {this.redirect = redirect;}public void setRedirect(String redirect) {if(redirect.equals("true") || redirect.equals("false")) {this.redirect = Boolean.valueOf(redirect);}else {throw new RuntimeException("redirect:"+redirect+"不是true和false");}}@Overridepublic String toString() {return "Forward [name=" + name + ", path=" + path + ", redirect=" + redirect + "]";}}

也对应一个简单工厂模式:

package com.zking.mymvc.XMLMedle;import java.io.InputStream;
import java.util.List;import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;public final class XMLModelFactory {private XMLModelFactory() {}private static Config config=new Config();static {try {InputStream is = XMLModelFactory.class.getResourceAsStream("/config.xml");SAXReader reader = new SAXReader();Document doc = reader.read(is);Element element = doc.getRootElement();List<Element> list = element.selectNodes("/config/action");for (Element e1 : list) {String path = e1.attributeValue("path");String type = e1.attributeValue("type");Action action=new Action();action.setPath(path);action.setType(type);List<Element> list2 = e1.selectNodes("forward");for (Element e2 : list2) {String name2 = e2.attributeValue("name");String path2 = e2.attributeValue("path");String redirect2 = e2.attributeValue("redirect");Forward f=new Forward();f.setName(name2);f.setPath(path2);f.setRedirect(redirect2);action.put(f);}config.put(action);}}catch(Exception e) {e.printStackTrace();}}public static Config getConfig() {return config;}public static void main(String[] args) {Config config2 = XMLModelFactory.getConfig();Action action = config2.find("/registerAction");System.out.println(action);Forward forward = action.find("success");System.out.println(forward);}}

这样就把xml读取到内存上面了。

xml文件全面解析。相关推荐

  1. mybatis中config.xml文件的解析

    config.xml文件的解析是主要是XMLConfigBuilder完成的,通过调用parseConfiguration来实现整个解析过程 public Configuration parse() ...

  2. IOS开发基础之使用AFNetworking框架实现xml文件的解析

    IOS开发基础之使用AFNetworking框架实现xml文件的解析 info.plist加入这行代码 <key>NSAppTransportSecurity</key> &l ...

  3. 使用c#对xml文件进行解析 功能演示 161483724

    使用c#对xml文件进行解析 功能演示 161483724 导入命名空间 实例化一个节点文档对象 读取文件 获取根节点 获取节点的名称 获取所有子节点 类对象数组的对象 根据索引从节点集合中取出节点对 ...

  4. C++中用TinyXML对XML文件进行解析

    最近老师要求的一个项目中需要在C++对XML文件进行解析,原来只在JAVA中做过类似的解析,然后上了某度了一下,最后搜了一篇关于TinyXML的博客,地址如下:http://blog.csdn.net ...

  5. (C++)将数据库文件导出XML文件以及解析XML文件生成数据库文件的处理方法

    将数据库文件导出XML文件以及解析XML文件生成数据库文件的处理方法 思路:将数据库所有要导出的信息通过sql语句得到,存储到结构体中,然后将结构体的内容通过自定义的xml格式导出. 此方法使用的是T ...

  6. python读取xml文件信息_python读取xml文件方法解析

    关于python读取xml文章很多,但大多文章都是贴一个xml文件,然后再贴个处理文件的代码.这样并不利于初学者的学习,希望这篇文章可以更通俗易懂的教如何使用python来读取xml文件. 什么是xm ...

  7. android xml解析demo,Android解析自定义xml文件--Sax解析xml文件,测试demo(方案二)...

    转载请注明出处:http://blog.csdn.net/droyon/article/details/9346657 Sax解析xml 以下是测试Demo 运行程序类 public class Te ...

  8. java对xml文件的解析_Java对XML文件的解析

    XML简介 围绕XML涉及到四方面的技术: 1.数据定义Schema.DTD 2.数据解析DOM.SAX两种解析模型 3.样式风格XSTL,使用XSTL可以将XML文件中存放的内容按照指定的样式显示为 ...

  9. Android向本地写入一个XML文件和解析XML文件

    在网络存储过程中有很多时候会遇到XML文件解析和使用XML保存一些信息,解析XML文件用的比较多的方法是pull解析和SAX解析,但是我一般只用pull解析,下面就向cd卡写入一个XML文件,然后再使 ...

  10. python处理xml文件_Python解析并修改XML文件

    XML 本质上只是一种数据格式,它的本意并不是管理数据,因此,在 XML 应用中,数据的管理仍然要借助数据库,尤其是当数据量很大.性能要求很高的时候. XML数据库具有以下优势: XML数据库能够对半 ...

最新文章

  1. SMOTE算法代码实现-机器学习
  2. Oracle DBA学习互联网化的内容
  3. js之事件冒泡和事件捕获
  4. Fatal Error: Unable to find package java.lang in classpath or bootclasspath
  5. python requests用法总结
  6. This relative module was not found ./cptable webpack
  7. Sargable 与 谓语下推 (predicate pushdown) 简介
  8. 【三维深度学习】基于片元的渐进式三维点云上采样模型
  9. 管理感悟:鼓励正确的山头主义
  10. android版 暴风影音,Android版暴风影音 掌上的3D影院
  11. 数学建模之数据包络分析(评价投入产出比的模型)
  12. 清爽通用工作总结汇报ppt模板免费下载_PPTX图片设计素材_包图网888pic.com
  13. Fitting Bayesian structural time series with the bsts R package
  14. 微信小程序:王者荣耀吃鸡气泡等等头像框DIY在线生成N种风格
  15. PCL教程-PCLVisualizer可视化类的使用
  16. 云服务器更换系统后tomcat,云服务器CentOS7系统环境配置(jdk和tomcat)(示例代码)...
  17. 程序员知识体系探索:点、线、面、体
  18. 【记录】Ubuntu已连接网络但无法上网解决方法
  19. php jq实现抽奖,php 实现抽奖功能
  20. 文献全文免费下载心得

热门文章

  1. 2.4fxblue跟单ea如何实现多跟一,一跟多,或者多跟多
  2. 母婴商城可行性分析报告
  3. 南方地区数据中心节能架构设计——以深圳地区为例
  4. 用python做简单的接口压力测试
  5. 基于Springboot+vue的甜品蛋糕销售商城网站 elementui
  6. 抗滑桩弹性计算方法_抗滑桩类型、设计及计算,这样讲解容易多了吧!
  7. Activiti 7流程跳转
  8. PPT述课怎样倒计时
  9. springboot+cxf框架开发SOAP接口
  10. SpringBoot之Slf4j日志实现根据业务不同将日志写进不同的文件